帮忙解决以下下面一个问题

来源:百度知道 编辑:UC知道 时间:2024/05/13 11:21:29
请读程序:
main()
{
int a=1,b=2,c=3; ++a; c+=++b;
{ int b=4,c; c=b*3; a+=c;
printf("first:%d,%d,%d\n",a,b,c);
a+=c; printf("Second:%d,%d,%d\n",a,b,c);
}
printf("third:%d,%d,%d\n",a,b,c);
} 该程序的输出是________。
third26,3,6 那a为什么是26,为什么不是2?
如何判别a是静态存储区的变量呢,a又没有这样定义:static int a=1?

变量的生存期与变量存储在内存的区域有关,用户存储空间一般分为三个部份,程序区、静态存储区和动态存储区。
静态存储区中的变量从程序开始执行到程序结束这段期间,始终拥有自己分配了的固定存储空间。
main()
{
int a=1,b=2,c=3; ++a; c+=++b;
{ int b=4,c; /*再看下这里吧,这里没有再次定义a*/
c=b*3; a+=c;
printf("first:%d,%d,%d\n",a,b,c);
a+=c; printf("Second:%d,%d,%d\n",a,b,c);
}
printf("third:%d,%d,%d\n",a,b,c);
}

first14,4,12
Second26,4,12
third26,3,6

注意括号里面的bc作用范围只是括号里面,
括号外面的bc才是third打印的,