在看C Program Plus时,对一个示例程序有些疑问,求解惑 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
cley
V2EX    C

在看C Program Plus时,对一个示例程序有些疑问,求解惑

  •  
  •   cley 2013-06-17 09:58:40 +08:00 2135 次点击
    这是一个创建于 4573 天前的主题,其中的信息可能已经有所发展或是发生改变。
    这是书中的示例代码
    #include <stdio.h>
    int main(void)
    {
    int feet, fathoms;

    fathoms = 2;
    feet = 6 * fathoms;
    printf("There are %d feet in %d fathoms!\n", feet, fathoms);
    printf("Yes, I said %d feet!\n", 6 * fathoms);

    return 0;
    }

    我尝试把
    fathoms = 2;
    feet 6 * fathoms;
    这两个语句的顺序调换一下,然后编译运行得到的是不同的内容,顺序不同
    出现不同结果的原因是?C语言菜鸟求助各位大大帮我解惑。
    第 1 条附言    2013-06-17 21:00:11 +08:00
    刚刚登上发现已经有那么多回复了,没有想到呢,大家的回答已经很详尽了,真是谢谢各位大大了!
    13 条回复    1970-01-01 08:00:00 +08:00
    moroumo
        1
    moroumo  
       2013-06-17 10:05:42 +08:00   1
    程序是按照代码的顺序由上到下执行的。
    既然你调换了顺序,当然结果就是不同的了。
    xunyu
        2
    xunyu  
       2013-06-17 10:12:26 +08:00   1
    fathoms 没赋值的话是随机数,
    LokiSharp
        3
    LokiSharp  
       2013-06-17 10:13:22 +08:00   1
    对调一下的话,因为 fathoms 在使用前没有初始化,你能得到的只有一串没有意义的随机数
    ETiV
        4
    ETiV  
       2013-06-17 13:23:51 +08:00   1
    int feet, fathoms;

    feet = 6 * fathoms;
    fathoms = 2;

    如果编译的时候没报warning, 建议你换一个C的环境.
    Golevka
        5
    Golevka  
       2013-06-17 13:27:44 +08:00   1
    教练我想要隔壁ML家的val-binding =v=
    xdeng
        6
    xdeng  
       2013-06-17 14:36:42 +08:00   1
    @xunyu 这同学非常棒~~~

    C语言最好在声明变量时 清零 或 赋值 !!!我有过血淋淋的教训
    bengol
        7
    bengol  
       2013-06-17 14:45:17 +08:00   1
    http://www.tenouk.com/Bufferoverflowc/Bufferoverflow2a.html
    details on function call, including how the local variables are initialized.
    LokiSharp
        8
    LokiSharp  
       2013-06-17 14:57:15 +08:00   1
    @xdeng 专业一点,叫做初始化23333
    detailyang
        9
    detailyang  
       2013-06-17 17:24:57 +08:00   1
    我习惯声明 变量时初始化...即便是0
    jedyu
        10
    jedyu  
       2013-06-17 17:31:45 +08:00   1
    楼主骗分
    cley
        11
    cley  
    OP
       2013-06-17 21:04:16 +08:00
    @ETiV 还在慢慢摸索中,环境什么的还不太懂,我是在linux系统中,在终端用vi和gcc操作的。
    clowwindy
        12
    clowwindy  
       2013-06-17 21:42:10 +08:00   1
    $ gcc -Wall main.c
    main.c: 在函数‘main’中:
    main.c:7:8: 警告:此函数中的‘fathoms’在使用前未初始化

    $ clang -Wall main.c
    main.c:7:14: warning: variable 'fathoms' is uninitialized when used here [-Wuninitialized]
    feet = 6 * fathoms;
    ^~~~~~~
    main.c:4:14: note: initialize the variable 'fathoms' to silence this warning
    int fathoms;
    ^
    = 0
    1 warning generated.

    $ clang --analyze main.c
    main.c:7:12: warning: The right operand of '*' is a garbage value
    feet = 6 * fathoms;
    ^ ~~~~~~~
    1 warning generated.
    cley
        13
    cley  
    OP
       2013-06-17 22:01:13 +08:00
    @clowwindy 受用了,我需要慢慢熟悉一下一些有用的命令选项才行。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2839 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 34ms UTC 14:20 PVG 22:20 LAX 06:20 JFK 09:20
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86