[問題] C的幾個測試問題

看板C_and_CPP作者 (5566 超強)時間11年前 (2012/09/23 22:40), 編輯推噓0(0018)
留言18則, 5人參與, 最新討論串1/1
開發平台(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

09/23 22:48, , 1F
*str++同*(str++)將指標推進一格
09/23 22:48, 1F

09/23 22:49, , 2F
(*str)++會把你的name1的值從"ABCDEF"變成"BCDEFG"
09/23 22:49, 2F

09/23 22:49, , 3F
感謝我懂 可是我是問 在putchar中為何(*str)++ 跑出來
09/23 22:49, 3F

09/23 22:52, , 4F
(*str)++ 是把 *str + 1 之後傳回 *str
09/23 22:52, 4F

09/23 22:52, , 5F
(*str)++ 會推掉 ABCDEF -> BCDEFG -> CDEFGH??
09/23 22:52, 5F

09/23 22:52, , 6F
所以putchar拿到的仍是舊的值
09/23 22:52, 6F

09/23 22:54, , 7F
疑...我有語病. 簡單來說就是"先遞增然後傳回原值"
09/23 22:54, 7F

09/23 22:57, , 8F
請問是說 先 put (*str) 所以是 A then (*str)+1
09/23 22:57, 8F

09/23 22:57, , 9F
所以"現在" 的位置 是 *str = B
09/23 22:57, 9F

09/23 22:59, , 10F
以第一圈來說
09/23 22:59, 10F

09/24 10:19, , 11F
別再猜了,直接用單步執行看http://ideone.com/eLJew
09/24 10:19, 11F

09/30 00:58, , 12F
我的認知 *str++ 是先將str取值,也就是a字元後再將str
09/30 00:58, 12F

09/30 01:00, , 13F
指向的位址做++動作,而(*str)++ 指的是對str取值後,
09/30 01:00, 13F

09/30 01:02, , 14F
也就是字元A後,再對字元A做++動作其結果為B,但在這個
09/30 01:02, 14F

09/30 01:06, , 15F
putchar裡會先輸出A字元後再對A字元做++動作,所以會看
09/30 01:06, 15F

09/30 01:10, , 16F
第一個輸出A字元結果,++後的字元B並不會輸出,接著再
09/30 01:10, 16F

09/30 01:12, , 17F
回FOR LOOP繼續執行,兩者的差別上第一個是對位址做++
09/30 01:12, 17F

09/30 01:13, , 18F
動作,第二個是對取出的字元做++的動作
09/30 01:13, 18F
文章代碼(AID): #1GNnzxnU (C_and_CPP)