黑马程序员技术交流社区

标题: 说出输出结果,然后在帮我逐行的解释下,谢谢。 [打印本页]

作者: cowozo    时间: 2015-2-7 18:08
标题: 说出输出结果,然后在帮我逐行的解释下,谢谢。
说出下列程序的输出结果(不要借助终端指令)
#include <stdio.h>

int main()
{
    int a = 20;
    int score = a + 100;
    printf("%d\n", score);
   
    {
        int score = 50;
        {
            score = 10;
            printf("%d\n", score);
        }
        a = 10;
    }
   
    {
        score = a + 250;
        int score = 30;
        printf("%d", score);
    }
   
    printf("%d\n", score);
    return 0;
}


作者: a3563365    时间: 2015-2-7 20:01
本帖最后由 a3563365 于 2015-2-7 20:06 编辑

//说出下列程序的输出结果(不要借助终端指令)
#include <stdio.h>

int main()
{
    int a = 20;  // 定义第一个变量,存为20,后面我会将这个称为a1
    int score = a + 100;  // 定义第二个变量,存为120,后面我会将这个称为score1
    printf("%d\n", score); // 打印score1并换行,屏幕显示120
   
    {
        int score = 50;  // 定义第三个变量,存为50,后面我会将这个称为score2
        {
            score = 10;  // 把score2改为10
            printf("%d\n", score);  // 打印score2并换行,屏幕显示10
        }
        a = 10;  // 将a1改为10
    }// 运行到这里时,score2被销毁
   
    {
        score = a + 250;  // 将score1改为 a1+250 = 260
        int score = 30;   // 定义第四个变量,存为30,后面我会将这个称为score3
        printf("%d", score);  // 打印score3(注意这里没换行),屏幕显示30
    } // 运行到这里时,score3被销毁
   
    printf("%d\n", score);  // 打印score1并换行,结果为 260
   
    return 0;}

程序我没运行,但是应该是这个结果没错的,有什么问题再找我吧,还有,基础测试最好自己做,基础不扎实,面试根本过不了,加油,共勉之~










作者: a3563365    时间: 2015-2-7 20:21
a3563365 发表于 2015-2-7 20:01
//说出下列程序的输出结果(不要借助终端指令)
#include

281714189  带上备注,要不可能会被拒绝
作者: MacxChina    时间: 2015-2-7 22:27

1.变量的作用域
从定义变量的那一行代码开始,一直到所在的代码块结束

2.代码块的作用
及时回收不再使用的变量,为了提升性能!

作者: Zeus-S    时间: 2015-2-8 00:28
a3563365 发表于 2015-2-7 20:01
//说出下列程序的输出结果(不要借助终端指令)
#include

  {
        int score = 50;  // 定义第三个变量,存为50,后面我会将这个称为score2
        {
            score = 10;  // 把score2改为10
            printf("%d\n", score);  // 打印score2并换行,屏幕显示10
        }
        a = 10;  // 将a1改为10
    }// 运行到这里时,score2被销毁


以上这段代码中的a为什么会被改了,a=10的作用域不应该消失了才对么,为什么到最后一步a会以10的结果去加250,求解,看来我的基础很不好啊
作者: Kuaile天使    时间: 2015-2-8 00:59
Zeus-S 发表于 2015-2-8 00:28
{
        int score = 50;  // 定义第三个变量,存为50,后面我会将这个称为score2
        {

a的作用域是从开始定义一直到程序结束。
作者: a3563365    时间: 2015-2-8 01:47
本帖最后由 a3563365 于 2015-2-8 01:48 编辑
Zeus-S 发表于 2015-2-8 00:28
{
        int score = 50;  // 定义第三个变量,存为50,后面我会将这个称为score2
        {

每次有对象被销毁,我都写了注释的,请仔细再看一遍....a从定义出来开始就没被销毁过,何谈没有作用域呢.....
作者: 昨夜雨轻栏    时间: 2015-2-8 14:35
我是来看评论的
作者: Zeus-S    时间: 2015-2-9 01:27
a3563365 发表于 2015-2-8 01:47
每次有对象被销毁,我都写了注释的,请仔细再看一遍....a从定义出来开始就没被销毁过,何谈没有作用域呢.. ...

#include <stdio.h>

int test()
{
          a=5;
          return 0;
}

int main()
{
          int a=8;
          test();
          printf("%d\n",a);
          return 0;
}


//不知道以上有没有语法错误,我随便打的,上述结果出来的是5还是8呢?因为我以为楼主那道题随着中括号的结束所以a=10的结果也就被销毁了所以a还是原来的30,
作者: 恋梦    时间: 2015-2-9 08:32
好久没有在论坛上看到这么简单的题了,别人都说了,我就不在重复说了,混个回贴,另外说明一下楼上的那家伙如果不报错,我跟他姓,他那个test()函数里都没定义a的类型,不报错会鬼了,test()函数里的a和main函数中的a根本就是两回事,楼主基础太不扎实了,需要再继续扎扎实实的练吧。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2