我应该使用一个函数为变量分配初始值,但不理解为什么我的代码中的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;}
答案 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
,因为您已将变量的地址传递给函数。