[語法] 被問到一個問題 pointer

看板C_and_CPP (C/C++)作者 (意志決定勝負)時間15年前 (2010/11/08 11:21), 編輯推噓1(108)
留言9則, 7人參與, 最新討論串1/1
#define MIN(a, b) (((a) > (b)) ? (b) : (a)) int a=1,b=3; int *pa=&a; --> a的 addr 0x0012f4bc int c=0; c=MIN(*pa++,b); 最後結果 pa=0x0012f4c4 非 0x0012f4c0 c=亂值=addr 0x0012f4c0 上沒意義的值 但是如果把b init 值改成-3 一切又正常 最後結果 c=-3 pa=0x0012f4c0 蠻奇怪的 有人可以解釋嗎 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.120.3.16

11/08 11:22, , 1F
坦白說我看不懂你想要做什麼......
11/08 11:22, 1F

11/08 11:24, , 2F
(((*pa++)>(b))?(b):(*pa++))
11/08 11:24, 2F

11/08 11:35, , 3F
哦哦 看到樓上的推文我就懂了
11/08 11:35, 3F

11/08 11:38, , 4F
請問記憶位置不是四個byte嗎?
11/08 11:38, 4F

11/08 11:41, , 5F
也就是a比b大時(b):(*pa++)的pa++不會執行嗎??????
11/08 11:41, 5F

11/08 11:52, , 6F
++會比*先執行
11/08 11:52, 6F

11/08 11:53, , 7F
所以*p++會變成=>*p; p++; => p就變亂碼了
11/08 11:53, 7F

11/08 12:44, , 8F
碰到巨集要很確定自己在做什麼,否則最好先紙上模擬一遍
11/08 12:44, 8F

11/08 19:10, , 9F
請不要把會產生副作用的東西丟到巨集裡
11/08 19:10, 9F
文章代碼(AID): #1Crsobkj (C_and_CPP)
文章代碼(AID): #1Crsobkj (C_and_CPP)