#include<stdio.h>
int * fun(int a1,int b)
{
int a[2];
a[0]=a1;
a[1]=b;
return a;
}
int main()
{
int *r=fun(3,5);
printf("%d\n",*r);
printf("%d\n",*r);
}
Run Code Online (Sandbox Code Playgroud)
运行代码后输出:
3
-1073855580
Run Code Online (Sandbox Code Playgroud)
我知道a [2]对于fun()来说是局部的,但是为什么值会改变相同的指针?
变量a确实是乐趣的本地变量.从该函数返回时,将弹出堆栈.记忆本身保持不变(暂时).当您第一次取消引用时,内存就是您期望的内存.由于取消引用发生在调用printf 之前,所以没有任何不好的事情发生.当printf执行时,它会修改堆栈并清除值.第二次通过你看到第一次通过printf发生的任何价值.
"正常"调用约定的事件顺序(我知道,我知道 - 没有这样的事情):
r(第一次通过,这应该是什么)如果int a[2];改为static int a[2];这将缓解问题.