65,199
社区成员




#include<stdio.h>
#include<stdlib.h>
int a=5;
int b=6;
int *In_0=&a;
int *In_1;
bool Calculate(int *In_0,int *In_1);
int main()
{
Calculate(In_0,In_1);
system("pause");
}
bool Calculate(int *In_0,int *In_1)
{
In_0=&b;
In_1=&b;
a=7;
return true;
}
bool Calculate(int *In_0,int *In_1)
{
In_0=&b;
In_1=&b;
a=7;
return true;
}
函数Calculate中参数In_0, In_1是局部变量,按照参数值传递的原理,这两个形参得到了全局变量指针的值,即他们(全局指针)指向的内容地址;在Calculate函数里并没有修改实参的指针指向。如果需要通过传参数修改全局指针,可以考虑传二重指针,如下:
#include<stdio.h>
#include<stdlib.h>
int a=5;
int b=6;
int *In_0=&a;
int *In_1;
bool Calculate(int *In_0,int *In_1);
int main()
{
Calculate(&In_0, &In_1);
system("pause");
}
bool Calculate(int **In_0,int **In_1)
{
*In_0=&b;
*In_1=&b;
a=7;
return true;
}
这样修改的即全局指针的指向;既然是全局变量,就不需要通过参数传递给Calculate函数。就算要传,你应该传的是这个指针本身的地址,你写成bool Calculate(int *In_0,int *In_1)是按值传递的,也就是函数中的形参是实参复制来的,你修改的只是一个复制品,并不是真正的实参,即你的全局变量