c语言中 函数调用结束后,函数内定义的静态变量所占用的空间被释放 这句话正确吗?求解释
展开全部
错误!
第一,对于动态存储方式,在函数调用开始时分配动态存储空间,函数结束时释放这些空间,例如传值的函数调用,int x=3,y=4; fun(x,y)//函数里x=4,y=3 ;函数调用结束后释放,main函数仍然是x=3,y=4
第二,在静态存储区内分配的存储单元,在程序整个运行期间都不释放,若非必要,尽量不要静态变量
int main()
{ int f(int);
int a=2,i;
for(i=0;i<3;i++)
printf("%d\n",f(a));
return 0;
}
int f(int a)
{ auto int b=0;//自动局部变量
static c =3;//静态局部变量
b=b+1;
c=c+1;
return(a+b+c);
}
输出为 7(2+1+4) 8(2+1+5) 9(2+1+6)
第一,对于动态存储方式,在函数调用开始时分配动态存储空间,函数结束时释放这些空间,例如传值的函数调用,int x=3,y=4; fun(x,y)//函数里x=4,y=3 ;函数调用结束后释放,main函数仍然是x=3,y=4
第二,在静态存储区内分配的存储单元,在程序整个运行期间都不释放,若非必要,尽量不要静态变量
int main()
{ int f(int);
int a=2,i;
for(i=0;i<3;i++)
printf("%d\n",f(a));
return 0;
}
int f(int a)
{ auto int b=0;//自动局部变量
static c =3;//静态局部变量
b=b+1;
c=c+1;
return(a+b+c);
}
输出为 7(2+1+4) 8(2+1+5) 9(2+1+6)
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询