#include <stdio.h>
int* a(int* x);
int main(void){
int oldpay=3000;
int *poldpay=&oldpay;
int *newpay=a(poldpay);
printf("%d,%d",*poldpay,*newpay);//关键行1
}
int* a(int* x){
*x+=1000; //关键行2
return x;
}
结果如下:
4000,4000。
正是因为指针作为变元的指向地址的不变性导致原来的变量的值发生了变化!
当把关键行2及之后行改为:int pay =*x+1000;
return &pay;
关键行1改为两个printf分别输出两个数据!
结果更为离谱 3000,12312312
为什么?
因为当a函数结束后作用域内的变量是无效的!!
当然上述情况也有可能显示为3000,4000
这种情况是因为a的内存尚未被重新使用!
网友评论