社区
C语言
帖子详情
*P++ / *(p++) / (*p)++ 各表示什么含义啊
lucy_999
2002-11-20 08:21:09
*P++
*(p++)
(*p)++
的区别
...全文
1378
30
打赏
收藏
*P++ / *(p++) / (*p)++ 各表示什么含义啊
*P++ *(p++) (*p)++ 的区别
复制链接
扫一扫
分享
转发到动态
举报
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)
对*p
++
与*
++
p;(*p)
++
与
++
(*p)的理解
参考:https://blog.csdn.net/baidu_37973494/article/details/82761455 *p
++
:等同于:*p; p += 1; 解析:由于*和
++
的运算优先级一样,且是右结合。故*p
++
相当于*(p
++
),p先与
++
结合,然后p
++
整体再与*结合。前面陈述是一种最常见的错误,很多初学者也是这么理解的。但是,因为
++
后置的时候,本身含...
C语言学习之指针 *p
++
、*(p
++
)、(*p)
++
*p
++
与*(p
++
)是等价的,该表达式返回*p,即p
表示
的地址所存的数据,并且指针p自增1 (*p)
++
该表达式返回*p,即p
表示
的地址所存的数据,然后该数据自增1 C编译器认为*和
++
是同优先级操作符,且都是从右至左结合的,所以*p
++
中的
++
只作用在p上,和*(p
++
)意思一样;在(*p)
++
中,由于()的优先级比*和
++
都高,所以
++
作用在()内的表达式*p上。 比如有: i...
C语言基础知识:*p
++
与*(p
++
),*
++
p与*(
++
p),(*p)
++
与
++
(*p),
++
*p的详细理解
p
++
和 *(p
++
) 都返回 p 自增之前的值。*
++
p 和 *(
++
p) 都返回 p 自增之后指向的值。关键在于理解前缀自增(
++
p)和后缀自增(p
++
)之间的区别,以及它们与解引用操作(*)的结合方式。前缀自增先改变指针的值,然后返回新的指针值;后缀自增返回原指针值,然后改变指针的值。解引用操作(*)则用于获取指针当前指向的值。二、(*p)
++
与
++
(*p)在C和C
++
中,(*p)
++
和
++
(*p) 这两个表达式虽然看起来相似,尽管它们都涉及到指针p。
关于*p
++
与*
++
p
假设 p 是指向数组 arr 中第 n 个元素的指针,那么 *p
++
、*
++
p、(*p)
++
分别是什么意思呢? *p
++
等价于 *(p
++
),
表示
先取得第 n 个元素的值,再将 p 指向下一个元素。 *
++
p 等价于 *(
++
p),会先进行
++
p 运算,使得 p 的值增加,指向下一个元素,整体上相当于 *(p+1),所以会获得第 n+1 个数组元素的值。 如果加了括号就先算括号里的,如,(*p)
++
会先取得第 n 个元素的值,再对该元素的值加 1。 ...
C语言基础知识:*p
++
与*
++
p;(*p)
++
与
++
(*p)的理解
首先查看C语言运算符优先级表,可以看到
++
和指针的*号运算优先级都是第二级。结合方向都是“右到左” *p
++
:等同于:*p; p += 1; 解析:由于*和
++
的运算优先级一样,且是右结合。故*p
++
相当于*(p
++
),p先与
++
结合,然后p
++
整体再与*结合。前面陈述是一种最常见的错误,很多初学者也是这么理解的。但是,因为
++
后置的时候,本身
含义
就是先运算后增加1(运算指的是p...
C语言
70,017
社区成员
243,265
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章