一行代碼一場夢~大家好 我是阿達
很多人對於這個問題有著疑惑 在這邊說明一下。
int a = 0;
a = a++;
printf("a = %d",a );
為什麼輸出結果是 0呢?
首先 int a = 0 ; //跟內存要一個位置 叫做a
再來就是 a = a++ //我們知道等號(=) 就是把右邊的東西丟到左邊 ++則是把原來的內存位置裡的數值加上1
那為什麼當我們打印a 的時候會是0呢?
其實原因很簡單~
大家注意到那個黃色的驚嘆號了嗎?
第二行的a = a++
這說明了我們沒有使用到他
為什麼我們沒有使用到他呢?
原因很簡單++這個運算符號,是『先執行再覆值』
用白話文的意思就是 你先把活幹了 我再給你工資!
所以說 他會在 a++ 被調用了之後才會加上 1
如果不信的小夥伴們我們可以繼續將代碼寫下去
我們就來調用一下 a++
一個簡單的 printf就可以了
- printf("a = %d\n", a++ );
复制代码
接下來我們看看結果
看到這裡一定有小夥伴們理智線崩潰了,這還是0啊!!!!!
別急,先放下你們手上的番茄跟雞蛋,我們現在只是調用了他,而的確是被執行了,這只是他被調用的第一次。
我們記得 他是『先執行』 『再覆值』
我跟你們保證 當你們在調用它一次的時候 將會看到奇蹟
不信的話我們再來加一句
- printf("a = %d\n", a++ );
复制代码
接下來 就是見證奇蹟的時候刻了!
小夥伴們看到了嗎? 他變成了1了 但是這個1 是他因為經過上一次被執行 才有1 所以在記憶體中 a++
現在其實是2
如果還是不信的小夥伴們 我們再來實驗一下
我們可以看到
整個程序當中 a++被調用了三次 但是結果卻是2
我想這應該可以說明了
a++ 他真真正正的事 『先值行』『再覆值』
回歸到問題
為什麼
int a = 0 ;
a = a++;
printf("a = %d",a);
a 會等於零?
的確 它顯示的結果是0
但是在內存中 他已經是1了
到這裡如果還是不相信的小夥伴 我們再來做一個實驗
- int a = 5 , b = 6 ;
-
- int c = a++ +b;
-
- printf("c =%d\n",c);
-
- printf("a =%d\n",a);
复制代码
在這裡說明一下
我們先跟內存要兩個空間
一個a 裡面的內容是5
一個b 裡面的內容是6
之後我們在宣告一個c 我們讓a++ 之後 在跟b相加
如果說a++不是『先值行』『再覆值』的話
那們答案應該是12對吧?
可是讓我看看結果是怎麼樣~
沒錯~ 答案是11 因為a 在執行完了之後才被加了一
為了驗證這點 我們在後面在打印一次 a 會發現
a 在執行完了之後 他的內容 的的確確是變成了六
關於++的問題呢 我們今天就到這裡啦 感謝各位同學的寶貴的時間
|