C语言程序设计 中的static函数问题
请教各位大师,C语言中的static函数指定某个变量为静态,有如下凝问待解!f(inta){autob=0;staticc=3;\\这里是指定c为静态变量,目的是要保留c...
请教各位大师,C语言中的static函数指定某个变量为静态,有如下凝问待解!
f(int a)
{auto b=0;
static c=3; \\这里是指定c为静态变量,目的是要保留c的初始赋值3不变?还是要保留最后给c的赋值不变呢?\\
b=b+1;
c=c+1; \\是要保留该运算式最终给c的赋值结果不变吗?
return(a+b+c);
}
main()
{int a=2,i;
for(i=0;i<3;i++)
printf("%d",f(a));
}
非常感谢!!!!!!!!!!!! 展开
f(int a)
{auto b=0;
static c=3; \\这里是指定c为静态变量,目的是要保留c的初始赋值3不变?还是要保留最后给c的赋值不变呢?\\
b=b+1;
c=c+1; \\是要保留该运算式最终给c的赋值结果不变吗?
return(a+b+c);
}
main()
{int a=2,i;
for(i=0;i<3;i++)
printf("%d",f(a));
}
非常感谢!!!!!!!!!!!! 展开
7个回答
展开全部
是保留最后的赋值!!
从你这个例子而言,如果在主函数中再调用一次f(int a)并输出,b的初值还是 0 ;但是 c 初始值 却是 4 返回值比第一次的多 1 。
深入一点解释:
把一个变量定义为static型,意味着 这个变量的存储在.data段。auto型的局部变量存储在栈上。
调用函数有一个释放栈空间的问题:
如果在被调函数中把一个变量定义为static型,他的地址不会释放!但是如果定义为默认的 auto型,他的空间会被释放!
从你这个例子而言,如果在主函数中再调用一次f(int a)并输出,b的初值还是 0 ;但是 c 初始值 却是 4 返回值比第一次的多 1 。
深入一点解释:
把一个变量定义为static型,意味着 这个变量的存储在.data段。auto型的局部变量存储在栈上。
调用函数有一个释放栈空间的问题:
如果在被调函数中把一个变量定义为static型,他的地址不会释放!但是如果定义为默认的 auto型,他的空间会被释放!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
f(int a)
{auto b=0;
static c=3; \\这里是指定c为静态变量,目的是要保留c的初始赋值3不变?还是要保留最后给c的赋值不变呢?\\
b=b+1;
c=c+1; \\是要保留该运算式最终给c的赋值结果不变吗?
return(a+b+c);
}
解答:
static c=3; \\这里是指定c为静态变量,在静态储存区,保留最后给c的赋值,这个C只能在这个函数里使用,但它的值一直存在,直到程序结束才消息,只要调用这个函数,取出C的值,那C的值就是上次修改的值
c=c+1; \\是要保留该运算式最终给c的赋值结果不变吗? 是的,一直保留到程序结束;
{auto b=0;
static c=3; \\这里是指定c为静态变量,目的是要保留c的初始赋值3不变?还是要保留最后给c的赋值不变呢?\\
b=b+1;
c=c+1; \\是要保留该运算式最终给c的赋值结果不变吗?
return(a+b+c);
}
解答:
static c=3; \\这里是指定c为静态变量,在静态储存区,保留最后给c的赋值,这个C只能在这个函数里使用,但它的值一直存在,直到程序结束才消息,只要调用这个函数,取出C的值,那C的值就是上次修改的值
c=c+1; \\是要保留该运算式最终给c的赋值结果不变吗? 是的,一直保留到程序结束;
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
static c=3;
代表只是在第一次运行时初始化为3,以后不再初始化
后面每次加的1都要被保留下来,因此第一次执行后c为4,第二次执行后c为5。。。
代表只是在第一次运行时初始化为3,以后不再初始化
后面每次加的1都要被保留下来,因此第一次执行后c为4,第二次执行后c为5。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
保留c的初始赋值3不变,只赋值一次。就不在初始话了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询