Re: [問題] ++運算符號實際運作的時機?

看板C_and_CPP作者 (new life)時間16年前 (2009/06/27 08:20), 編輯推噓3(3013)
留言16則, 9人參與, 最新討論串2/3 (看更多)
※ 引述《giveatry (new life)》之銘言: : #include <stdio.h> : int main(){ : int* c = 1; : printf("c++ is %d\n", c++); : printf("c is %d\n", c); : return 0; : } : 印出來的結果 : c++ is 1 : c is 5 : 為什麼會這樣呢ꄊ: 謝謝 我改成這樣的時候 #include <stdio.h> #include <stdlib.h> int main(){ int* c = (int*)malloc(sizeof(int)*1); *c = 1; printf("c++ is %d\n", c++); printf("c is %d\n", c); return 0; } 印出來的結果是 c++ is 159821832 c is 159821836 改成這樣的話,好像就是印記憶體位置了 愈搞愈迷糊了@@ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.137.38.159

06/27 16:41, , 1F
你這兩個程式其實是在做一樣的事情啊:把c指向的位址印出來
06/27 16:41, 1F

06/27 16:43, , 2F
請教一下,為什麼第一個程式印出來的不像是記憶體位址?
06/27 16:43, 2F

06/27 16:50, , 3F
想想 int* c = 1; 和 *c = 1; 有何不同....XD
06/27 16:50, 3F

06/27 18:40, , 4F
int *c = 1;拆成兩行就是;int *c; c=1;
06/27 18:40, 4F

06/27 18:54, , 5F
我還是不了解為什麼這兩個程式印出來的東西為什麼不一樣
06/27 18:54, 5F

06/27 18:54, , 6F
可以點出我的錯誤在哪裡嗎?
06/27 18:54, 6F

06/27 19:06, , 7F
一個pointer的大小單位是4 所以把他加1相當於是加4
06/27 19:06, 7F

06/27 19:07, , 8F
應該是這樣吧
06/27 19:07, 8F

06/27 19:08, , 9F
我想建議原po說說自己的想法與預期結果
06/27 19:08, 9F

06/27 19:09, , 10F
這樣大家會比較容易知道你的觀念 也較容易討論
06/27 19:09, 10F

06/27 22:07, , 11F
你的兩個程式印的都是記憶體位址, 只是第一個程式是把c
06/27 22:07, 11F

06/27 22:07, , 12F
這個指標變數指向的位置設成1; 第二個程式c指向的初值為
06/27 22:07, 12F

06/27 22:08, , 13F
malloc回來的位址; 基本上, 指標指向的記憶體位址換算出
06/27 22:08, 13F

06/27 22:09, , 14F
來就是個無號整數, 所以也可以把整數cast一下成位址.
06/27 22:09, 14F

06/28 01:30, , 15F
我建議原PO把C重打一次基礎...看起來像是東學一點西學一點
06/28 01:30, 15F

06/28 08:04, , 16F
為什麼這麼堅持用 pointer 啊? 是在學 pointer 嗎?
06/28 08:04, 16F
文章代碼(AID): #1AHTOz-U (C_and_CPP)
文章代碼(AID): #1AHTOz-U (C_and_CPP)