函数初始化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);

我应该使用一个函数来为变量分配初始值,但我不明白为什么我代码中的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;}

您的函数正在尝试按值传递。 然而,在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);