黑马程序员技术交流社区
标题:
c语言的题目
[打印本页]
作者:
魑魅魍魉121
时间:
2014-6-6 18:37
标题:
c语言的题目
本帖最后由 魑魅魍魉121 于 2014-6-7 07:32 编辑
#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;
}
{
score = a + 250;
int score = 30;
printf("%d\n",score);//30
}
printf("%d\n",score);//260
return 0;
}
为什么最后的score的输出是260???,求大神指点
作者:
夏沫的黄昏′
时间:
2014-6-6 19:08
{
score = a + 250;
int score = 30;
printf("%d\n",score);//30
}
printf("%d\n",score);//260
里面的sorce 跟 外面的sorce 不是一个数。。。因为作用域不一样 里面的是{} 这个块内的局部变量 所以 里面的sorce不会影响外面sorce的值
作者:
XCodeRush
时间:
2014-6-6 19:30
你好,我手里没有编译器,没法调试程序,但我可以试着用程序回答一下。
#include <stdio.h>
int main()
{
|--->int a = 20;
| int score = a + 100; <---------------------------------------------------------------------|
| |
| printf("%d\n",score);//120 |
| |
| { // ---------------------------------------- |
| int score = 50; | |
| { | |
| score = 10; | |
| ---> 这里面的score在执行到 |
| printf("%d\n",score);//10 | 达括号结束时就被销毁了。 |
| } | 但是外面a的值被修改为10 |
|------------>a = 10; | |
} // ---------------------------------------- |
|
{ |
|-----------> score = a + 250; // -----------------> 当进入这个语句块时,语句块中没有声明score, |
| 所以程序就到外面寻找名叫score的变量, |
| 程序找到之前有声明过score, |
| 所以就修改了第一个声明的score变量的值为260<-|
| int score = 30; // -------------> 这个score在代码块中声明,代码块执行结束销毁。
| printf("%d\n",score);//30
| }
|
|----> printf("%d\n",score);//260 // ---------------> 这里输出的score就是程序
第一次声明的那个score变量的值
此时这个score已经被第二个代码块中的
第一句代码修改成了260
return 0;
}
复制代码
希望我的回答能够帮助到你。
作者:
王海江1
时间:
2014-6-6 19:39
#include <stdio.h>
int main()
{
int a = 20; //a已经在主函数定义,应用于整个函数。
int score = a + 100; //score已经在主函数定义,应用于整个函数。 printf("%d\n",score);//120
{
int score = 50; //这个score再次被定义,但它只在这个函数里有效。
{
score = 10; //这次赋值跟上边这个score有关系,它不应用于整个函数。
printf("%d\n",score);//10
}
a = 10; //a在这个函数里面没被再次定义,所以这次赋值应用于整个函数。
}
{
score = a + 250; //在这个函数里面,score==120,a==10,这次赋值应用于整个函数。
int score = 30; //在此,score在此被定义,接下来的score只应用于这个函数
printf("%d\n",score);//30
}
printf("%d\n",score);//260
return 0;
}
希望能给您带来帮助
作者:
光辉岁月
时间:
2014-6-6 20:26
XCodeRush 发表于 2014-6-6 19:30
你好,我手里没有编译器,没法调试程序,但我可以试着用程序回答一下。
真不愧是有图有真相啊{:2_34:}
作者:
koukou
时间:
2014-6-6 20:33
其实你还是局部变量和全局变量给油搞清楚,局部变量随着所在代码块的结束而销毁,也就在内存中回收,但是全局变量是在整个程序的生命周期中都是有效的。程序中的a就是全局变量,score=a+250;这个语句中a的值已经变成了10,而score在这个语句块中并没有声明,要依据就近原则,找到最近声明score而且没被销毁的score,也就是在内存中是分配了空间的,因此就找到了int score=a+100;这个score,这个score是全局变量,会在程序结束时才会消亡,因此打印出来的260
希望我的解答能给你提供帮助
作者:
魑魅魍魉121
时间:
2014-6-7 07:27
哦哦,谢谢大神
作者:
魑魅魍魉121
时间:
2014-6-7 07:29
XCodeRush 发表于 2014-6-6 19:30
你好,我手里没有编译器,没法调试程序,但我可以试着用程序回答一下。
看懂了,谢谢大神
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2