看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC 平台 void Test() { int a = 3; int b = 7; int sum; char name[9] = "abcdef"; char name1[9] = "ABCDEF"; char *str; str = name; //sum = a++ + ++b; //問1 a = 3 b = 8 sum = 11 then a = 4 對嗎?? //printf("%d\n",sum); //sum = ++a + b++; //問2 a = 4 b = 7 sum = 11 then b = 8 對嗎?? //printf("%d\n",sum); //sum = a+++b++; //問3 a = 3 b = 7 sum = 10 then a = 4 b = 8 對嗎?? //printf("%d\n",sum); //sum = ++a + ++b; //問4 a = 4 b = 8 sum = 12 對嗎?? //printf("%d\n",sum); for(str = name; *str != '\0'; str++) { putchar(*str++); //這個是ace } for(str = name1; *str != '\0'; str++) { putchar((*str)++); //這個跑出來卻是ABCDEF } } 問5 想請問 *str++ 和 (*str)++有何不同 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 36.224.59.124
xluds24805:*str++同*(str++)將指標推進一格 09/23 22:48
xluds24805:(*str)++會把你的name1的值從"ABCDEF"變成"BCDEFG" 09/23 22:49
SNSDpk5566:感謝我懂 可是我是問 在putchar中為何(*str)++ 跑出來 09/23 22:49
bibo9901:(*str)++ 是把 *str + 1 之後傳回 *str 09/23 22:52
SNSDpk5566:(*str)++ 會推掉 ABCDEF -> BCDEFG -> CDEFGH?? 09/23 22:52
bibo9901:所以putchar拿到的仍是舊的值 09/23 22:52
bibo9901:疑...我有語病. 簡單來說就是"先遞增然後傳回原值" 09/23 22:54
SNSDpk5566:請問是說 先 put (*str) 所以是 A then (*str)+1 09/23 22:57
SNSDpk5566:所以"現在" 的位置 是 *str = B 09/23 22:57
SNSDpk5566:以第一圈來說 09/23 22:59
diabloevagto:別再猜了,直接用單步執行看http://ideone.com/eLJew 09/24 10:19
silentxdog:我的認知 *str++ 是先將str取值,也就是a字元後再將str 09/30 00:58
silentxdog:指向的位址做++動作,而(*str)++ 指的是對str取值後, 09/30 01:00
silentxdog:也就是字元A後,再對字元A做++動作其結果為B,但在這個 09/30 01:02
silentxdog:putchar裡會先輸出A字元後再對A字元做++動作,所以會看 09/30 01:06
silentxdog:第一個輸出A字元結果,++後的字元B並不會輸出,接著再 09/30 01:10
silentxdog:回FOR LOOP繼續執行,兩者的差別上第一個是對位址做++ 09/30 01:12
silentxdog:動作,第二個是對取出的字元做++的動作 09/30 01:13