首先看两个函数
函数1:
void assign1(int *x)
{
int a=100;
x=&a;
}
函数2:
void assign2(int * x)
{
int a=100;
*x=a;
}
然后 我们写个demo测试一下两个函数
demo1:
#include <stdio.h>
int main(int argc, char const *argv[])
{
int *p,b=100;
p=&b;
printf("p=%0x\n",p);
void assign1(int *x)
{
printf("%0x\n",&x);
int a=1000;
x=&a;
}
assign(p);
printf("b=%d",*P);
return 0;
}
结果:
b=100
demo2
#include <stdio.h>
int main(int argc, char const *argv[])
{
int *p,b=100;
p=&b;
printf("p=%0x\n",p);
void assign2 (int *x)
{
printf("%0x",&x);
int a=1000;
x=&a;
}
assign2(p);
printf("b=%d",*P);
return 0;
}
结果:
b=1000
其实从两个demo中答应参数的地址可以看出,
参数x是有自己重新分配的地址,和实参的地址是完全不同的,
形参在函数栈调用结束后会收回栈帧,也就是之前分配的变量。
所以在demo1中只是对形参x进行赋值。
但在demo2中*x 和 *p 指向的同一个地址,故操作能生效。