返回值为指针的函数的风险

2017-11-20  本文已影响0人  禅绕此心

#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的内存尚未被重新使用!

上一篇 下一篇

猜你喜欢

热点阅读