29.以下程序的输出结果是()
#include “stdio.h”
#include “string.h”
int a=4;
int f(int n)
{int t=0;static int a=5;
if(n%2){int a=6;t+=a++;}
else {int a=7;t+=a++;}
return t+a++;
}
main( )
{int s=a,i=0;
for (;i<2;i++) s+=f(i);
printf("%d\n",s);
}
A.24 B.28 C.32 D.36 答案为B,if(n%2){int a=6;t+=a++;}中a的值增加了1,在执行 return t+a++;时,a的值为6还是7?
你好,对于i=0时,static int a=5,执行else {int a=7;t+=a++;} 后,t=t+a=0+7=7,a=a+1=8;return t+a++中a是static int a=5,执行后,t=t+a=7+5=12,a=a+1=6;f(0)=12
return t+a++中a是static int a=5,为什么a是static int a=5,而不是7或者8?
i =1时,return t+a++中a=6 ???执行return前,a不是已经增加了1 吗?
你是说在{int a=6;t+=a++;}和 {int a=7;t+=a++;} 执行完后a的值还是取static int a=5 中a的值?
static声明的局部变量即静态局部变量
1.用static声明的局部变量属于静态储存类别,在静态存储区分配存储单元,在整个程序运行期间都布释放。
2.对静态局部变量是再编译时赋初值的,即只赋初值一次,在程序运行时它已有初值。以后每次调用函数时不再重新赋初值而只是保留上次函数调用结束时的值。
3.如果在定义局部变量时不赋初值的话,则对静态局部变量来说,编译时自动赋初值0(对数值类型变量)或空字符(对字符变量)。
4.虽然静态局部变量在函数调用结束后仍然存在,但其他函数时不能引用它的。
{int a=6;t+=a++;}和 {int a=7;t+=a++;} 中的a都属于auto变量(即自动变量),有效空间从定义开始,到本段程序结束,在这里到a++后面的}。
{int a=6;t+=a++;}执行完a=5,return t+a++;执行完,a=6
a= {int a=7;t+=a++;} 执行完,a继续为上次这个函数执行完时的6,return t+a++;后,a=7