找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索

初學(xué)C51單片機(jī),遇到個(gè)奇怪的C語言問題

查看數(shù): 6481 | 評(píng)論數(shù): 48 | 收藏 0
關(guān)燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請(qǐng)稍候......
發(fā)布時(shí)間: 2019-6-3 16:43

正文摘要:

int x=0,y=0; y=x++; 按道理x=1,y=0 實(shí)際結(jié)果都是0 麻煩大家有空幫我看看,問題在哪,先謝了

回復(fù)

ID:428991 發(fā)表于 2019-6-20 15:41
printf輸出之后實(shí)際結(jié)果是x=1,y=0
ID:491053 發(fā)表于 2019-6-20 12:07
x++是實(shí)現(xiàn)x自增,但是返回x原來的值的,
ID:400515 發(fā)表于 2019-6-20 11:54
這個(gè)是先賦值再加,++i是先加再賦值的
ID:566445 發(fā)表于 2019-6-20 09:46
是對(duì)的 你先看看那個(gè)++ -- 的運(yùn)算
ID:365802 發(fā)表于 2019-6-20 08:08
++X, 表示先自加, 再進(jìn)行運(yùn)算, 而 X++表示先運(yùn)算, 后自加.
ID:567297 發(fā)表于 2019-6-19 22:04
完全是正確的,可能是你的編譯器有問題,或者你操作失誤,我用的Codeblocks

27($(UN9YF2%@XW9XK$LJ$1.png (22.91 KB, 下載次數(shù): 132)

27($(UN9YF2%@XW9XK$LJ$1.png

GA%T[5H_XB_3N_E}3Q%8W6R.png (250.23 KB, 下載次數(shù): 139)

GA%T[5H_XB_3N_E}3Q%8W6R.png
ID:567297 發(fā)表于 2019-6-19 22:01
不呀,完全沒有錯(cuò)?赡苁悄愕木幾g器有問題,我用Codeblocks運(yùn)行后,輸出X=1,Y=0
ID:567103 發(fā)表于 2019-6-19 18:23
運(yùn)算優(yōu)先級(jí)的問題?,++跟賦值號(hào)的優(yōu)先級(jí)的優(yōu)先問題,實(shí)際應(yīng)用最簡(jiǎn)單的辦法就是分開2行或者加個(gè)括號(hào)什么的.根本沒必要去記那些運(yùn)算優(yōu)先級(jí)... 像這樣寫 x++; y=x; 就肯定不會(huì)有問題了.
ID:565756 發(fā)表于 2019-6-19 12:17
應(yīng)該是所用軟件的規(guī)則不一樣吧?赡芷脚_(tái)不支持這種語法
ID:562123 發(fā)表于 2019-6-13 21:02
把++的語法好好復(fù)習(xí)一下吧
ID:560178 發(fā)表于 2019-6-13 17:17
這是對(duì)的
ID:560178 發(fā)表于 2019-6-13 17:15
x++,是x先取值0、就是y=0,然后x再自加1,x=1了;
ID:532564 發(fā)表于 2019-6-13 17:12
x++是先取x的值 再執(zhí)行x=x+1   你想要預(yù)期結(jié)果的話要寫y=++x
ID:448860 發(fā)表于 2019-6-12 22:30
y應(yīng)該是y=y++吧
ID:451448 發(fā)表于 2019-6-12 22:20
優(yōu)先級(jí)不一樣,++的優(yōu)先級(jí)小于=的優(yōu)先級(jí)
ID:549556 發(fā)表于 2019-6-12 20:43
是對(duì)的哦 ,建議你看下程序有沒有錯(cuò)誤
ID:368940 發(fā)表于 2019-6-12 20:11
是先x賦給y,然后x自加1
ID:561132 發(fā)表于 2019-6-12 18:35
y=x++是先用再+1    y=++x才是+1再用
ID:561132 發(fā)表于 2019-6-12 18:34
y=x++是先用x=0再在+1
ID:516571 發(fā)表于 2019-6-8 10:57
把兩個(gè)+號(hào)放在x的左邊就是先算x+1的值賦給y
ID:557357 發(fā)表于 2019-6-7 21:10
這題很簡(jiǎn)單  首先x,y初值都是零,執(zhí)行y=x++這個(gè)語句時(shí)  因?yàn)閤++是先把值給y  自身才加一  所以y=0,然后x++這個(gè)語句只是單純的  實(shí)際上x沒有得到值所以還是為零  不知道這樣說你能不能明白
ID:316256 發(fā)表于 2019-6-7 15:47
運(yùn)算優(yōu)先級(jí)的問題
ID:514901 發(fā)表于 2019-6-7 11:43
int x=0,y=0;     y=x++;   printf(“x=%d,y=%d”,x,y);  就會(huì)看到x=1,y=0
ID:555552 發(fā)表于 2019-6-6 00:01
+號(hào)在右邊
ID:556073 發(fā)表于 2019-6-5 22:39
這個(gè)問題有點(diǎn)難
ID:93224 發(fā)表于 2019-6-5 17:45
是0就對(duì)了
ID:461604 發(fā)表于 2019-6-5 09:56
y = ++x,相當(dāng)于 x=x+1; y= x;
y = x++,相當(dāng)于 y = x; x=x+1;
ID:245771 發(fā)表于 2019-6-5 09:05
建議詳細(xì)查看c基礎(chǔ),查閱運(yùn)算符結(jié)合規(guī)則,然后編程實(shí)踐
ID:550032 發(fā)表于 2019-6-4 21:39
“++”放在左邊才是1,放在右邊是先賦值再計(jì)算
ID:493864 發(fā)表于 2019-6-4 19:32
加號(hào)在右邊,那是先進(jìn)行賦值在加一,所以執(zhí)行語句后值不改變
ID:511890 發(fā)表于 2019-6-4 18:09
z43218 發(fā)表于 2019-6-4 09:52
接下來,我把代碼,j=i++;改為 i++; 也就是說,去掉j=,所有代碼就全部編譯了,而且結(jié)果也正確。

也不知 ...

經(jīng)過測(cè)試,這是Keil的坑。感覺所有的等式剛開始都不會(huì)被執(zhí)行,只有++的變量被調(diào)用了,才會(huì)執(zhí)行。
如下修改成下面就好了。
        int i,j,k;
        i=0;
        j=0;
        j=i++;
        k=i;
        LED =0;
        while(1);
ID:139042 發(fā)表于 2019-6-4 12:09
這個(gè)是keil的代碼優(yōu)化的結(jié)果,x和y對(duì)整個(gè)程序無實(shí)際意義,kei給優(yōu)化掉了。你可以試著改改優(yōu)化等級(jí)。
ID:123289 發(fā)表于 2019-6-4 11:25
沒有什么為什么,就是編譯平臺(tái)的定義,換個(gè)平臺(tái)或許就可以。
所以,用KELL,就看KELL的的規(guī)定!
盡可采用“不會(huì)引起岐義方式寫程序”
不過某些老師,為了顯擺自己,就是歡喜搞一些易歧義問題來坑人。
ID:552592 發(fā)表于 2019-6-4 10:59
++和--在后面,先賦值再++。在前面先++再賦值
ID:554383 發(fā)表于 2019-6-4 09:38
單純從規(guī)范的角度,不建議這種寫法。
ID:554341 發(fā)表于 2019-6-4 09:15
這個(gè)不奇怪,你用x++ ,這個(gè)是先賦值給y 才加一
x++與++x的區(qū)別,y=x++;表示x先對(duì)y賦值然后再自+1,y=++x;表示x先自+1然后再對(duì)y賦值。
++符號(hào),在變量名的右邊,是先取值、再自加1,即先把x值給y、x再自加1

ID:158375 發(fā)表于 2019-6-4 08:31
樓主應(yīng)該先看看C運(yùn)算的優(yōu)先級(jí),運(yùn)算優(yōu)先級(jí)搞不清楚,其他都是瞎扯。

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表