先拿一个代码块来说
/返回指针的函数
//编写一个函数,返回一个一维数组;
//因为c语言不支持在调用函数时返回局部变量的地址
#include <stdio.h>
#include <stdlib.h>
int* f1(){
static int arr[10];//加上static,使arr的空间分布在静态数据区,与全局变量的内存分布相同
int i=0;
for(i=0;i<10;i++)
{
arr[i]=rand();
}
return arr;//因为使用的是static,因此函数调用完成时不会把其原本存储的数据销毁
}
int main(){
int *p;
int i;
p=f1();
for(i=0;i<10;i++){
printf("%d\n",*(p+i));
}
}
其在vs2022上会这样显示:
但是如果把上述static的静态变量声明去掉,结果会很奇怪:
这是因为c语言不支持调用函数时返回局部变量的地址。
终归原因是内存分布的原因:
因为局部变量保存在栈中,函数被调用时才动态的为变量分配内存,它的作用仅限于函数内部。