c语言中 函数调用结束后,函数内定义的静态变量所占用的空间被释放 这句话正确吗?求解释
2个回答
展开全部
不正确,函数内的静态变量在该函数调用结束后,且该函数所在的模块没有被释放的情况下,这个静态变量值为上次函数调用后的值。这样说比较抽象。举例说明一下:
void
AA()
{
static
int
s_iCount;
//C语言默认初始化0值
s_iCount++;
//每调用AA()一次,s_iCount会自加一次
printf("%d\n",
s_iCount);
}
void
main()
{
AA();
//第一次调用
AA();
//第二次调用
}
运行输出:
1
2
说明:AA()中的
s_iCount,只能在AA()中访问操作,不能在其外的函数中操作,也不能在main()中直接访问。
void
AA()
{
static
int
s_iCount;
//C语言默认初始化0值
s_iCount++;
//每调用AA()一次,s_iCount会自加一次
printf("%d\n",
s_iCount);
}
void
main()
{
AA();
//第一次调用
AA();
//第二次调用
}
运行输出:
1
2
说明:AA()中的
s_iCount,只能在AA()中访问操作,不能在其外的函数中操作,也不能在main()中直接访问。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
错误!
第一,对于动态存储方式,在函数调用开始时分配动态存储空间,函数结束时释放这些空间,例如传值的函数调用,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)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询