我想知道为什么静态数组不需要被释放?我知道当创建动态数组,例如
int *p;
p = malloc(10*sizeof(int));
我们需要使用以下方式释放已分配的内存:
free(p);
对于函数中的静态数组,当被调用的函数完成时,静态数组将自动释放。
我不理解的是:在使用像这样的函数返回静态数组时:
int *subFunc(){
static int a[5] = {1,2,3,4,5};
return a;
}
int main(){
int *p;
p = subFunc();
}
如果静态数组在执行完毕后会自动释放,那么我们如何仍然正确地访问静态数组的值?
static
局部变量与static
全局变量的行为有所不同:它们的初始化不是在程序启动时进行,而是在程序执行首次经过它们初始化的位置时进行。 - Quentinstatic
。而且在C语言中,static
的初始化器可能没有任何副作用,所以你实际上无法观察到它何时被初始化。 - Tavian BarnessubFunc()
之外,你不能使用a
,但我并没有看到任何理由你不能使用指向a
的指针,并且在subFunc()
之外使用它。 - Z boson