函数初始化C中的变量

时间:2014-10-17 16:50:26

标签: c

我应该使用一个函数为变量分配初始值,但不理解为什么我的代码中的init函数没有初始化a,b,c,它给出了一些垃圾数字。另外,我应该使用一个旋转函数,使用变量a,b,c的静态声明,但由于它的静态,它不会交换变量。我是怎么做到的?

 void init(int num1, int num2, int num3);

 int main(void){

 int a, b, c;



 init(a, b, c); 


 printf("a=%d, b=%d,  c=%d\n", a, b, c);


rotate();

 return 0;
 }

 void init(int num1, int num2, int num3){

 printf("Enter value for num1: ");
 scanf("%d",&num1);
 printf("Enter values for num2: ");
 scanf("%d",&num2);
 printf("Enter values for num3: ");
 scanf("%d",&num3);
 }


void rotate(void){
static int a,b,c;
int temp;
temp=a;
a=b;
b=c;
c=temp;}

2 个答案:

答案 0 :(得分:6)

您的功能正在尝试通过 但是,在C中,通过 地址 传递非数组变量是唯一方式,允许函数更改它。

您对函数参数的使用可以像这样纠正...
将功能更改为:

void init(int *num1, int *num2, int *num3){

 printf("Enter value for num1: ");
 scanf("%d",num1);//because argument is already a 
                  //pointer, you do not need to de-reference (&)
 printf("Enter values for num2: ");
 scanf("%d",num2);
 printf("Enter values for num3: ");
 scanf("%d",num3);
 }

并且,更改电话:

 init(a, b, c); 

到:

 init(&a, &b, &c); 

答案 1 :(得分:0)

将您的函数声明和定义更改为

void init(int *num1, int *num2, int *num3)

使用

调用该函数
init(&a, &b, &c);

同时删除该函数中所有&中的scanf,因为您已将变量的地址传递给函数。