看板 C_and_CPP 關於我們 聯絡資訊
回應我第一個問題 看一下這個例子 #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
bdvstg: 先取值,再加1 07/04 15:04
bigpigbigpig: http://codepad.org/VbS2xaCx 07/04 16:15
kwpn: 下面那段英文不就是說明嗎 07/04 18:46
bibo9901: 後置的++ 是遞增之後傳回舊值 07/04 19:01
bibo9901: ++的確是先做, 但是*會作用在舊值上 07/04 19:02
Leeng: *p++被解讀成*(p++) p本來是10的addr,經過p++之後p指向 07/04 21:54
Leeng: 20的addr 所以此時*p就是20 07/04 21:54
Leeng: 至於*(p++); 真正有意義的是p++這個動作,之後就變成 20; 07/04 21:56
Leeng: 不知道我這樣理解對不對 07/04 21:56
bigpigbigpig: A = *p++ ==> A = *p; p++; 07/04 22:13
EdisonX: #1IaXjPZm <- 這問題相關性高 , 回覆 -> #1IaZvKvq 07/04 23:06
Ebergies: 它只是想跟你說 *p++ 不會改到 arr 的值而已 07/05 11:03
Ebergies: 因為 ++ 優先權高, 所以會作用在 p 上而不是 *p 上 07/05 11:05