C语言中 *p++和 *(p++)是等价的吗 为什么

如题所述

第1个回答  2018-02-17
数组a[3]={1,2,3},p指向a[0],那么*(p++)的结果是1还是2呢?也许认为先算括号,p加加后指向第2个,再取内容,结果是2了,这种理解是有误的,括号确实先算,但结果却是1不是2。因这里的后加加不是独立的,它要让p先参与其他运算后才加加,这是后加加的规则,在*p++式子中,p的前面是*,后面是++,*与++都要争抢P,但后++的级别最高(前++的级别与*一样,后++的级别与()一样,属最高级),所以后++首先抢到p,但后++自身有一规则,就是要等别人算了后再算自己,打个比方,后++是先拿到P,然后借给*,等*用完后它才拿回来加工处理,所以*p++与*(p++)等价,加不加括号都是一样