为什么数组是静态的

时间:2016-09-05 21:56:43

标签: c arrays function pointers

我已经看了解释如何从函数返回数组的教程

这是类似的代码

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int *grn();

int main()
{
    int *a;
    a=grn();
    for(int i = 0;i<10;i++){
        printf("%d\n",a[i]);
    }
    return 0;
}

int *grn(){
    static int arrayy[10];
    srand((unsigned) time(NULL));
    for(int i=0;i<10;i++){
        arrayy[i]=rand();
    }
    return arrayy;
}

我对此有一些疑问.. 它工作正常,并在数组内生成随机值,但

  • 为什么函数grn是指针

  • 为什么a variable中的main function是指针?

  • 为什么arrayy array是静态的?
  • 我为什么要制作grn函数指针?

当我尝试运行此代码但是arrayy变量不是静态的时,我得到segmentation fault

1 个答案:

答案 0 :(得分:0)

  1. 该功能不是指针。返回值为int *,因为它返回int数组。

  2. 您需要一个指针来访问数组。如果它不是指针,那么您需要一个int变量。

  3. 如果它不是静态的,那么当函数到达return时,数组将被释放并消失。该数组既不是全局变量,也不是堆中分配的内存,因此当函数到达return时,它将被释放。如果你使它static,它就像一个全局变量(不完全一样),并且当函数到达结尾时不会被释放。

  4. 读取数字1。

  5. 最后,你得到分段错误,因为函数返回了一个悬空指针,因为数组不是static因此当函数到达结尾时被释放。