void setnew(int *ptr)
{
int b = 30;
printf("setnew----&b:0x%x\n", &b);
printf("setnew------&ptr:0x%x , ptr:0x%x , *ptr:%d \n", &ptr,ptr,*ptr);
*ptr = b;
printf("setnew------&ptr:0x%x , ptr:0x%x , *ptr:%d \n", &ptr,ptr,*ptr);
}
void main()
{
int a =10;
int *p = &a;
printf("main----&a:0x%x\n", &a);
printf("main------&p:0x%x , p:0x%x , *p:%d \n", &p,p,*p);
setnew(p);
printf("main------&p:0x%x , p:0x%x , *p:%d \n", &p,p,*p);
}
1、main函数新建变量a=10,a的地址是0x12ff44;
2、main函数新建指针p,p指针自己的地址是0x12ff40,a的地址赋给变量p,所以p=0x12ff44;
3、调用setnew函数中创建ptr指针,ptr指针自己的地址是0x12fef0,由于实参就是main函数的指针p,所以ptr的指向和指针p一样,也就是ptr=0x12ff44,都是指向变量a的地址;
4、当在setnew函数中执行*ptr = b;之后,也就是把指针ptr指向位置的内容修改为b的值,由于b=30ÿ