A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Kuhoku 中级黑马   /  2015-6-15 12:45  /  1116 人查看  /  11 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

一行代碼一場夢~大家好 我是阿達

很多人對於這個問題有著疑惑 在這邊說明一下。
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就可以了

  1. printf("a = %d\n", a++ );
复制代码

接下來我們看看結果




看到這裡一定有小夥伴們理智線崩潰了,這還是0啊!!!!!

別急,先放下你們手上的番茄跟雞蛋,我們現在只是調用了他,而的確是被執行了,這只是他被調用的第一次。

我們記得 他是『先執行』 『再覆值』

我跟你們保證 當你們在調用它一次的時候 將會看到奇蹟

不信的話我們再來加一句

  1. 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了

到這裡如果還是不相信的小夥伴 我們再來做一個實驗

  1.     int a = 5 , b = 6 ;
  2.    
  3.     int c =  a++ +b;
  4.    
  5.     printf("c =%d\n",c);
  6.    
  7.     printf("a =%d\n",a);
复制代码

在這裡說明一下

我們先跟內存要兩個空間
一個a 裡面的內容是5
一個b 裡面的內容是6

之後我們在宣告一個c   我們讓a++ 之後 在跟b相加

如果說a++不是『先值行』『再覆值』的話

那們答案應該是12對吧?

可是讓我看看結果是怎麼樣~




沒錯~ 答案是11 因為a 在執行完了之後才被加了一

為了驗證這點 我們在後面在打印一次 a 會發現

a 在執行完了之後 他的內容 的的確確是變成了六

關於++的問題呢 我們今天就到這裡啦 感謝各位同學的寶貴的時間





点评

我帮你去掉了~  发表于 2015-6-19 22:51
最下面兩張圖 我怎樣也消不掉 大家就忽略別看了  发表于 2015-6-15 15:42

评分

参与人数 1技术分 +3 收起 理由
黑妞 + 3 很给力!

查看全部评分

11 个回复

倒序浏览
支持!请楼下保持队形
回复 使用道具 举报
好厉害的感觉,繁体都出来了,屌
回复 使用道具 举报
热心的阿达。。。
回复 使用道具 举报
看的我模模糊糊的,简单的问题复杂化
回复 使用道具 举报
黑妞 发表于 2015-6-15 12:57
支持!请楼下保持队形

謝謝黑妞
回复 使用道具 举报
Kuhoku 中级黑马 2015-6-15 15:21:04
7#
飞翔的猪 发表于 2015-6-15 13:55
看的我模模糊糊的,简单的问题复杂化

如果你想要更簡單的說明的話 那其實就是a++ 其實就是先將a計算之後再加上1

我也喜歡簡單的說明跟回答

但是考慮到初學的小夥伴們 阿達還是決定用逐步引導跟驗證的方式來說明

感謝你寶貴的意見
回复 使用道具 举报
喜歡妳的認真,加油!
回复 使用道具 举报
~缘~ 中级黑马 2015-6-27 17:43:14
9#
收藏了。
回复 使用道具 举报
看晕了我。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马