同一线程中使用同一个栈,因而函数调用的时候往往会对栈进行覆盖使用,加入函数返回的是指针,可能就会有预料不到的结果。
#include<stdio.h>
int* get()
{
int i = 0x12345678;
return &i;
}
int main()
{
int* p = get();
printf("%x\n",*p );//printf后修改了栈中i的地址的内容
printf("%x\n",*p );//再printf输出相同地址的内容时则发生了改变,不再是12345678
get(); //将栈空间重置,又将i的地址的内容恢复
printf("%x\n",*p );//此时i的地址的内容便是12345678
getchar();
return 0;
}
运行结果正如我们代码里的分析一样: