首页 > 解决方案 > 为什么 C 允许函数返回本地声明的指针而不是本地声明的数组?

问题描述

在这里,我有一个函数 f(),它在本地定义了一个整数 x 和一个指向它的指针,pointer_x。它返回那个指针。然后我尝试取消对指针的引用,它仍然为我提供了该指针指向的正确整数。我的问题是,如果函数在本地声明一个数组并返回该数组是非法的(由于在该函数返回时释放了堆栈帧),为什么函数声明一个指针并返回该指针是合法的?

我的印象是数组基本上是一个指针。

int *f();

int main(void){
    int *test;
    test = f();
    printf("%d", *test); //prints 0
}

int *f(){
    int x = 0; 
    int *pointer_x = &x;
    return pointer_x;
}

标签: carrayspointersstack

解决方案


推荐阅读