我已经看了解释如何从函数返回数组的教程
这是类似的代码
#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
是静态的?当我尝试运行此代码但是arrayy变量不是静态的时,我得到segmentation fault
答案 0 :(得分:0)
该功能不是指针。返回值为int *
,因为它返回int
数组。
您需要一个指针来访问数组。如果它不是指针,那么您需要一个int
变量。
如果它不是静态的,那么当函数到达return
时,数组将被释放并消失。该数组既不是全局变量,也不是堆中分配的内存,因此当函数到达return
时,它将被释放。如果你使它static
,它就像一个全局变量(不完全一样),并且当函数到达结尾时不会被释放。
读取数字1。
最后,你得到分段错误,因为函数返回了一个悬空指针,因为数组不是static
因此当函数到达结尾时被释放。