#include <stdio.h>
int main()
{
int a = 20;
int score = a + 100;
printf("%d\n", score);//120
{
int score = 50;
{
score = 10;
printf("%d\n", score);//10
}
a = 10;//a定义范围不止于上面括号?这里如果用int a 是不是下面再计算就不是这里的a值?
}
{
score = a + 250;
int score = 30;
printf("%d", score);//30
}
第一句score = a + 250;这个score是260,因为a在上一个代码块中被赋值成10,所以加上250是260。
这个score在这个代码块中并不是新定义的而是在main函数开始时定义的。所以这个score占用的是外部score的存储空间,和外部score是一个变量,外部的score变量到了这里值就改成了260。
第二句又定义了一个score变量,这是一个新的变量,与外部的无关。在这个代码块结束后,在这个代码块中定义的变量就回收了。但是score = a + 250;这句的作用并不会因为这个代码块的结束而结束。它的作用域在于它被定义的代码块中,main函数结束时它才结束,main函数不结束score等于260的值就不会被局部的代码块结束而释放掉。作者: 安胜雷 时间: 2014-4-28 09:21
a定义范围不止于上面括号?这里如果用int a 是不是下面再计算就不是这里的a值?
a = 10;是一个赋值过程,完成最近一个变量int a赋值就结束了,不论是不是在括号里
换成int a 那么赋值过程仅在括号内完成然后就结束了 和大括号外的变量没有关系
为什么最后一句printf输出的是上面括号里的score,不应该是输出最上面大括号外面的最先定义的score么?
最后一句printf输出的还是最上面的score,只不过最上面的score经过score = a + 250;赋值发生了变化,变成了
int score = a +250;这里a也经过赋值变成了10,所以输出结果就是260.