函数初始化C中的变量
我应该使用一个函数来为变量分配初始值,但我不明白为什么我代码中的init函数没有初始化a、b、c,它给出了一些垃圾号。我还应该使用一个旋转函数,使用变量a、b、c的静态声明,但是由于它是静态的,所以它不交换变量。我怎么做到的函数初始化C中的变量,c,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);
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;}
您的函数正在尝试按值传递。 然而,在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);
致:
将函数声明和定义更改为
void init(int *num1, int *num2, int *num3)
并使用
init(&a, &b, &c);
同时删除该函数中所有scanf中的&in,因为您已经将变量的地址传递给该函数。对于c,您需要传递变量地址指针以从函数中初始化它们。但是我必须使用void initint num1、int num2、int num3,而不是void initint*num1、int*num2、int*num3,在这种情况下,我如何使用指针没有多大意义。它是通过值传递的;这和你传递的不是同一个numN。我唯一能看到这种情况的方法是将a,b和c作为全局变量,调用的参数是初始化值。但这不是一种好的工作方式。谢谢,那么,使用rotate函数声明static var怎么样,我试过了,但它不起作用,我不应该使用rotate的参数。void rotate{static int a,b,c;int*temp,*p,*q,*r;p=&a;q=&b;r=&c;temp=p;p=q;q=r;r=temp;}函数rotate的原型为void void,这意味着它没有传递任何变量,并且它不返回任何内容。此外,变量a、b、c仅在该函数中具有寿命。它们在主要功能上与a、b、c完全不同。修复方法:对该函数执行与我描述的对init函数相同的操作,即使用int*,…,对其进行原型化,然后传递&a,。。。。并删除int a;,以及rotate函数中的其他参数,因为它们将作为指针参数传递。
init(&a, &b, &c);