Re: [问题] while(*s++ = *t++ );疑问

楼主: BitTorrent (螳勃唬)   2015-07-04 14:54:55
回应我第一个问题
看一下这个例子
#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
: : 想请问一下可是++ 优先权 不是大于*
: : 所以照理讲第一个不会被复制到阿?
作者: bdvstg (bdvstg)   2015-07-04 15:04:00
先取值,再加1
作者: bigpigbigpig (To littlepig with love)   2015-07-04 16:15:00
作者: kwpn (ITSST)   2015-07-04 18:46:00
下面那段英文不就是说明吗
作者: bibo9901 (function(){})()   2015-07-04 19:01:00
后置的++ 是递增之后传回旧值++的确是先做, 但是*会作用在旧值上
作者: Leeng (Leeng)   2015-07-04 21:54:00
*p++被解读成*(p++) p本来是10的addr,经过p++之后p指向20的addr 所以此时*p就是20至于*(p++); 真正有意义的是p++这个动作,之后就变成 20;不知道我这样理解对不对
作者: bigpigbigpig (To littlepig with love)   2015-07-04 22:13:00
A = *p++ ==> A = *p; p++;
作者: EdisonX (卡卡兽)   2015-07-04 23:06:00
#1IaXjPZm <- 这问题相关性高 , 回复 -> #1IaZvKvq
作者: Ebergies (火神)   2015-07-05 11:03:00
它只是想跟你说 *p++ 不会改到 arr 的值而已因为 ++ 优先权高, 所以会作用在 p 上而不是 *p 上

Links booklink

Contact Us: admin [ a t ] ucptt.com