作者BitTorrent (螳勃唬)
看板C_and_CPP
標題Re: [問題] while(*s++ = *t++ );疑問
時間Sat Jul 4 14:54:55 2015
回應我第一個問題
看一下這個例子
#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
推 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
推 Ebergies: 它只是想跟你說 *p++ 不會改到 arr 的值而已 07/05 11:03
→ Ebergies: 因為 ++ 優先權高, 所以會作用在 p 上而不是 *p 上 07/05 11:05