飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 6545|回复: 17

初学者C语言学习中的一个简单困惑解答

[复制链接]
  • TA的每日心情
    开心
    2024-1-4 14:31
  • 签到天数: 73 天

    [LV.6]常住居民II

    发表于 2015-1-20 11:19:55 | 显示全部楼层 |阅读模式
    main()
    {
       int a;
       int b;
       b = a;
       scanf("%d",&a);
       printf("this is a = %d\n",a);
       printf("this is b = %d\n",b);
    }
    QQ截图20150120110307.png
    ----------------------------------------------------------------------------------------------------------
    main()
    {
       int a = 0;
       int b;
       b = a;
       scanf("%d",&a);
       printf("this is a = %d\n",a);
       printf("this is b = %d\n",b);
    }

    QQ截图20150120110520.png
    ----------------------------------------------------------------------------------------------------------
    main()
    {
       int a;
       int b = 0;
       b = a;
       scanf("%d",&a);
       printf("this is a = %d\n",a);
       printf("this is b = %d\n",b);
    }

    QQ截图20150120110307.png
    ---------------------------------------------------------------------------------------------------------------
    main()
    {
       int a;
       int b = 0;
       scanf("%d",&a);
       b = a;
       printf("this is a = %d\n",a);
       printf("this is b = %d\n",b);
    }


    QQ截图20150120110802.png
    ------------------------------------------------------------------------------------------------------------------
    由以上现象总结了一下,不能在获取输入之前给申请的内存空间赋一个变量值.逻辑上就是错误的.a的数据在scanf之前都是未知的.只是某一个内存块.那么,把a的值写入到b,究竟写入了什么?谁也没办法想出来.校长说计算机是跟着人的逻辑走的,在人的逻辑层理解不了的东西,计算机肯定也理解不了.相当正确.感谢校长视频中用自己的方式把一些书面语解释为菜鸟能看得懂的语言.

    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2019-3-14 10:36
  • 签到天数: 44 天

    [LV.5]常住居民I

    发表于 2015-1-20 11:29:15 | 显示全部楼层
    變量未初始化的話,就直接沿用內存裏面原來的值。

    点评

    多谢Z大解答.刚好昨天跟朋友一起讨论.就总结了一下,和更多初学者分享一下.  发表于 2015-1-20 11:32
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2023-5-25 11:16
  • 签到天数: 25 天

    [LV.4]偶尔看看III

    发表于 2015-1-20 11:37:20 | 显示全部楼层
    变量就是内存,从OD的角度说,局部变量一般就是栈空间,内存里的数据在没有初始化之前都是随机的,都是不可知的。用过的内存在释放以后,里面的数据并没有被清零,所以,这个应该很容易理解。
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2022-4-8 23:42
  • 签到天数: 10 天

    [LV.3]偶尔看看II

    发表于 2015-1-20 18:24:15 | 显示全部楼层
    我前段时间写那个keygen时 win32 ok。result regcode,MFC在第一次执行完毕,第二次运算注册码  注册码变化无穷的其中一个原因就是变量被分配的内存数据没情0
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2019-3-25 14:18
  • 签到天数: 881 天

    [LV.10]以坛为家III

    发表于 2015-1-20 19:41:53 | 显示全部楼层
    昨天我就遇上这个问题
    没有初始化变量就用了,出来的值怎么样都不对
    最后问冷大才知道
    谢谢!
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    5 天前
  • 签到天数: 1276 天

    [LV.10]以坛为家III

    发表于 2015-1-21 00:04:57 | 显示全部楼层
    本帖最后由 lhglhg 于 2015-1-21 00:06 编辑

    用VC编译的第1种,运行可以得到正确的B值

    int a;
    int b ;
    scanf("%d",&a);
    b = a;
    printf("this is a = %d\n",a);
    printf("this is b = %d\n",b);

    难道跟编译器有关系?

    点评

    把b=a写到scanf前面试试.嘿嘿  发表于 2015-1-21 03:06
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2018-9-27 19:17
  • 签到天数: 31 天

    [LV.5]常住居民I

    发表于 2015-1-21 03:26:26 | 显示全部楼层
    未初始化的变量就是垃圾数据
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2018-9-27 19:17
  • 签到天数: 31 天

    [LV.5]常住居民I

    发表于 2015-1-21 03:28:29 | 显示全部楼层
    你把a设为全局变量再试试是否为0。。。。
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表