c - 函数调用结束时的数组销毁

标签 c arrays pointers

这是我的代码

#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/

相关文章:

c# - 为什么我的 C# 代码比我的 C 代码快?

c - 我的错误在哪里? (转换基数)

arrays - 将数组传递给 awk,其中包含需要打印的列号

c++ - 如何在两个不同大小的排序数组中找到第 k 个最大的数

c - 指向数组指针的指针

c++ - 阻塞模式的原理是什么?

c - 从自定义命令(Tcl_CmdProc)调用其他Tcl命令

php - 数组正确打印数据但查询只显示一半

java - Java 中指针的替代方案

c++ - 如何通过引用 O(1) 在 C++ 中复制 vector ?