这是我的代码
#include<stdio.h>
int * fun(int a1,int b)
{
int a[2];
a[0]=a1;
a[1]=b;
//int c=5;
printf("%x\n",&a[0]);
return a;
}
int main()
{
int *r=fun(3,5);
printf("%d\n",r[0]);
printf("%d\n",r[0]);
}
我在 Windows 7 上运行代码块 每次我运行循环时,我都会得到输出
22fee8
3
2293700
这是我不明白的部分:
r 需要一个指向内存的一部分的指针,它在调用 fun 函数时被解释为一系列框(每个框的宽度为 4 字节 ->Integers)
应该发生的是函数的 printf 将打印 a 的地址或 a[0] 的地址:
借调
现在的问题是:
每次运行程序时我都得到相同的地址?
并且数组 a 应该在函数结束时销毁 fun 只有指针必须在函数调用后保留 那为什么行 r[0] 必须打印 3?
最佳答案
r 指向不再存在的东西。您正在返回指向堆栈上某些内容的指针。当 fun() 结束时,该堆栈将倒带。它可以指向之后的任何内容,但没有任何内容覆盖它,因为从未调用过另一个函数。
关于c - 函数调用结束时的数组销毁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9124672/