*p++ *(p++) (*p)++ p++有何区别

如题所述

指针运算符*与自加运算符++优先级相同,属于单目运算符,结合方向自右向左,所以*p++与*(p++)等价,表示分别输出内存中存放的值。(*p)++,存放在内存中的值自加1,p++表示向高地址方向1个存储单元。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-03-18
例如

int a[5]={1,2,3,4,5};
int *p = a;

*p++ 先取指针p指向的值(数组第一个元素1),再将指针p自增1;

cout << *p++; // 结果为 1

cout <<(*p++); // 1

(*p)++ 先去指针p指向的值(数组第一个元素1),再将该值自增1(数组第一个元素变为2
cout << (*p)++; // 1
cout <<((*p)++) //2
*++p 先将指针p自增1(此时指向数组第二个元素),* 操作再取出该值

cout << *++p; // 2
cout <<(*++p) //2

++*p 先取指针p指向的值(数组第一个元素1),再将该值自增1(数组第一个元素变为2)
cout <<++*p; // 2
cout <<(++*p) //2

注意,上面的每条cout输出,要单独输出才能得到后面的结果。本回答被网友采纳
第2个回答  2014-03-19
(*p)++,是先取指针P的值,然后对其值进行++运算,
*(p++),是先对指针P进行++运算,然后再取取值,
*p++,同*(p++),因为按优先级来看,*和++是同级,他们都是从右到左的顺序进行运算,所以先++,再*。

如果
char q[5] = "am";
char *p = q;
那么,
(*p)++后,p就变成了"bm";因为是进行对其首元素进行加1运算
*(p++)后,p就变成了"m",因为是先指向下一个元素,再进行取值运算,
*p++同上面,
如果只是征对这3个语句赋值给其他变量的话,3个的结果都是a,在这里。
char o = (*p)++;
char m = *(p++);
char n = *p++;
都是a。
第3个回答  2014-03-19
c语言指针
相似回答