Re: [問題] while(*s++ = *t++ );疑問

看板C_and_CPP作者 (螳勃唬)時間10年前 (2015/07/04 14:54), 編輯推噓4(409)
留言13則, 7人參與, 最新討論串4/4 (看更多)
回應我第一個問題 看一下這個例子 #include <stdio.h> int main(void) { int arr[] = {10, 20}; int *p = arr; *p++; printf("arr[0] = %d, arr[1] = %d, *p = %d", arr[0], arr[1], *p); return 0; } The expression *p++ is treated as *(p++) as the precedence of postfix ++ is higher than *. Therefore the output of second program is “arr[0] = 10, arr[1] = 20, *p = 20“. 我還是搞不太懂阿.... ※ 引述《bdvstg (bdvstg)》之銘言: : 剛剛查了一下優先順序 : Suffix increment > Indirection (dereference) > Direct assignment : ++ (第2個) > *(第3) > =(第16) : 所以我想問一下為什麼不是++先做 : 而是取值和賦値先 : 也就是為什麼不是底下這樣 : while (*t) : { : s++; : t++; : *s=*t : } : 另外我對那種多個的Condition判斷疑惑很久了 : (不知道有沒有術語,想下關鍵字查一下) : while(*s++ = *t++) : 是要看*s的値,還是*t的値 (以程式邏輯來猜應該是*t) : (原文中兩種都有人回) : 還是要看 賦値的回傳結果? : 另外我看過3個的... : 類似底下這樣 : while(*s++ = *t++ = *q++) : 不過那時候不影響我讀code就不管它 : ※ 引述《BitTorrent (螳勃唬)》之銘言: : : 請問一下 : : strcpy 中 : : while( *s++ = *t++); : : 可以copy char arrays : : 想請問一下可是++ 優先權 不是大於* : : 所以照理講第一個不會被複製到阿? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.164.50.126 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1435992898.A.79B.html

07/04 15:04, , 1F
先取值,再加1
07/04 15:04, 1F

07/04 16:15, , 2F

07/04 18:46, , 3F
下面那段英文不就是說明嗎
07/04 18:46, 3F

07/04 19:01, , 4F
後置的++ 是遞增之後傳回舊值
07/04 19:01, 4F

07/04 19:02, , 5F
++的確是先做, 但是*會作用在舊值上
07/04 19:02, 5F

07/04 21:54, , 6F
*p++被解讀成*(p++) p本來是10的addr,經過p++之後p指向
07/04 21:54, 6F

07/04 21:54, , 7F
20的addr 所以此時*p就是20
07/04 21:54, 7F

07/04 21:56, , 8F
至於*(p++); 真正有意義的是p++這個動作,之後就變成 20;
07/04 21:56, 8F

07/04 21:56, , 9F
不知道我這樣理解對不對
07/04 21:56, 9F

07/04 22:13, , 10F
A = *p++ ==> A = *p; p++;
07/04 22:13, 10F

07/04 23:06, , 11F
#1IaXjPZm <- 這問題相關性高 , 回覆 -> #1IaZvKvq
07/04 23:06, 11F

07/05 11:03, , 12F
它只是想跟你說 *p++ 不會改到 arr 的值而已
07/05 11:03, 12F

07/05 11:05, , 13F
因為 ++ 優先權高, 所以會作用在 p 上而不是 *p 上
07/05 11:05, 13F
文章代碼(AID): #1LbuD2UR (C_and_CPP)
文章代碼(AID): #1LbuD2UR (C_and_CPP)