*P++ / *(p++) / (*p)++ 各表示什么含义啊

lucy_999 2002-11-20 08:21:09
*P++
*(p++)
(*p)++
的区别
...全文
1378 30 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangcongconger 2010-06-22
  • 打赏
  • 举报
回复
*P++ 是先取p所指向空间的值,再指向下一个空间
*(p++) 由于是后+所以先算*,指针p再+1指向下一个空间,等同于*P++
*++p 指针p先+1指向下一个空间再取该空间的值
*(++p) 等同于*++p
(*p)++ 先取指针p的内容,再对该内容+1
++(*p) 等同于(*p)++

各位我的理解对吗?
yskcg 2010-05-31
  • 打赏
  • 举报
回复
[Quote=引用 28 楼 yskcg 的回复:]
引用 8 楼 xiaojunsyiae 的回复:
*p++ 表示先取当前指针值*p,然后指针向后移动一位p++;
*(p++) 等价于 *p++,可能和我们平时的考虑不太一样的。但是确实是这样。
(*p)++ 表示先取指针的值,然后在该值(不是指针移动)上加1。

楼上这位朋友,你说错了,如果想要想让指针移动,然后再去取指针的值的话,应该使用*(++p)这样的写法。

这些都是指针的……
[/Quote]自己在写一段程序来证明这是正确的:
18 #include<stdio.h>
19 void main()
20 {
21 int *cp;
22 int arry[]={0,1,2};
23 cp=arry;
24 printf("%d",*cp);
25 printf("%d",*cp++);
26 printf("%d",*++cp);
27 }
运行后结果是: ./zhizheng
002,我是在linux平台下编译的.
yskcg 2010-05-31
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 xiaojunsyiae 的回复:]
*p++ 表示先取当前指针值*p,然后指针向后移动一位p++;
*(p++) 等价于 *p++,可能和我们平时的考虑不太一样的。但是确实是这样。
(*p)++ 表示先取指针的值,然后在该值(不是指针移动)上加1。

楼上这位朋友,你说错了,如果想要想让指针移动,然后再去取指针的值的话,应该使用*(++p)这样的写法。

这些都是指针的一些基本的用法,如果有不明白的,可以……
[/Quote]这位楼主说的都是心理话呀,这是指针的基本概念,我顶你.
asvaboy1980 2002-11-21
  • 打赏
  • 举报
回复
唉,<<c++primer>>上有一张表格,*优先级小于++
xiaojunsyiae 2002-11-21
  • 打赏
  • 举报
回复
谭浩强《c程序设计(第二版)》215页。
自己好好看看吧!不要做无谓底争论了!反而把自己底思想搞乱!
xspf 2002-11-21
  • 打赏
  • 举报
回复 2
其实不论++的优先级比*的高还是一样,*p++结果都是一样的,都是p先与++结合,然后*在与p++结合,不过我还是认为所有单目逻辑、算术运算符优先级都是一样的。

不过首先要明确几点:

p++的结果,p自增1,p++这个运算式的值是p自增以前的值;
++p的结果,p自增1,++p这个运算式的值是p自增以后的值;

而*最终是要与p++这个运算式的值相结合的,而非与p结合

下面列出几个式子我认为应该得到的结果

*p++; // p自增1,取p自增前的值的引用(取值);

*(p++); // 等同于*p++;

*++p; // p自增1,取p自增后的值的引用;

*(++p); // 等同于*++p;

(*p)++; // p所指向的变量自增1,整个运算式的值是p所指向的变量自增前的值

++(*p); // p所指向的变量自增1,整个运算式的值是p所指向的变量自增后的值



applexgw 2002-11-21
  • 打赏
  • 举报
回复
程序运行的结果 *p++
是先取引用 再地址自增
是不是 他们的级别不一样啊
但是钱能的那本c++上说优先级同一级别的
怎么回事啊????
benbenhuhu 2002-11-21
  • 打赏
  • 举报
回复
*p++ 和(*p)++ 结果一样是对指针p所指的对象增加
*(p++)是指针p自身增加后,取其所指的对象
aiyinsitan 2002-11-21
  • 打赏
  • 举报
回复
*P++ 获得P地址中的值, 在自增1
*(p++) P向后移动一个储存单位,接着该地址中的值自增1
(*p)++ 和 *P++ 效果一样
boolean6199 2002-11-21
  • 打赏
  • 举报
回复
后缀 ++的实际运算方式举例说明如下:
x = y++ 等于 x = (t = y,y = y + 1,t) 即等于 t = y,y = y + 1,x = t;其中x,y,t属于同一类型。
另外,单目的运算符是右连接的,且++(后缀)的优先级大于*(dereference),我们就可以理解*p++与*(p++)实际是一样的,关于*p++,以及运算符的优先级,在bs的the c++ programming language 中(6.2节)有说明。
Boor 2002-11-20
  • 打赏
  • 举报
回复
楼上的也说错了,写个最简单的程序一试就知道了。

(*p)++ 指针所指的变量++ 是正确的。
nothing707 2002-11-20
  • 打赏
  • 举报
回复
*P++ 指针所指的对象++
*(p++) 指针地址++后指的对象
(*p)++ 指针所指的变量++
xspf 2002-11-20
  • 打赏
  • 举报
回复
楼上的空心菜老兄应该控制一下自己的情绪了

一个基本的问题:p++这个式子的值就是p的当前值,p++就是先算的
IEQQ 2002-11-20
  • 打赏
  • 举报
回复
参考谭浩强的 c编程语言,
++优先级大于指针运算符.
*p++和*(p++)是一个意思.
(*p)++ 表示取地址p里面的内容加上一
bonmarshal 2002-11-20
  • 打赏
  • 举报
回复
#include <iostream.h>

void main()
{
int x[5]={1,2,3,4,5};
int *p;
p=x;
cout<<p<<'\t'<<*p<<endl;
cout<<*p++<<endl;
cout<<p<<'\t'<<*p<<endl<<endl;

p=x;
cout<<p<<'\t'<<*p<<endl;
cout<<*(p++)<<endl;
cout<<p<<'\t'<<*p<<endl<<endl;

p=x;
cout<<p<<'\t'<<*p<<endl;
cout<<(*p)++<<endl;
cout<<p<<'\t'<<*p<<endl<<endl;
}
前两个可以理解 最后的难


Crystal_arrow 2002-11-20
  • 打赏
  • 举报
回复
*和++的优先级是一样的,不过是自右想做的结合!!!!!1


!!!!!!







Boor 2002-11-20
  • 打赏
  • 举报
回复
关于(*p)++,我说错了。其次,你说的*(p++) 等价于 *p++,这个表达式没意见,但是要清楚,它们的运算的先后是不一样的,相信你也是知道的。xiaojunsyiae(快乐的小强)不必和这群苯蛋解释了,浪费我们的时间,现在的论坛。。。。哎。
linhaibin 2002-11-20
  • 打赏
  • 举报
回复
*p++和*(P++)是一样的,取值后,地此后移呀
(*P)++是相当于a[0]++
自己好好看看书吧
applexgw 2002-11-20
  • 打赏
  • 举报
回复
我查书了
优先级一样的
单目从右往左

但是我问老师说的象xiaojunsyiae(快乐的小强
可是我觉的他不对啊
cnpublics 2002-11-20
  • 打赏
  • 举报
回复
我一般先不看“++”,把表达式算完后再看“++”。
*(p++)就等价于*p.最后再++。
加载更多回复(10)

70,017

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧