问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

c语言中*++p与++*p有什么区别

发布网友 发布时间:2022-05-12 00:44

我来回答

3个回答

热心网友 时间:2023-10-30 18:53

区别:

1、*p++与*(p++)是等价的,表示取p所指单元的值,p指向下一单元,即p自加1。

2、*p++是指下一个地址。

3、(*p)++是指将*p所指的数据的值加一。

C编译器认为*和++是同优先级操作符,且都是从右至左结合的,所以*p++中的++只作用在p上,和*(p++)意思一样;在(*p)++中,由于()的优先级比*和++都高,所以++作用在()内的表达式*p上。

比如有:

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

x=*p++;//执行这一句后x=a[0]=1,p=a+1

y=(*q)++;//执行这一句后,y=a[0]+1=2,q仍然=a

扩展资料:

验证程序1

#include"stdio.h"

void main()

{

int a=2;

int*p=&a;

int*pold;//记录P指向的地址,为了作为比较使用

pold=p;

//-----------原来的信息

printf("原来的a=%d",a);

printf("原来的p=%x",p);

printf("原来的pold=%x",pold);

//----------进行变化

printf("*p++的结果=%d,a的结果a=%d",*p++,a);

printf("地址变化的结果p-pold=%x",p-pold);

}

程序2

#include"stdio.h"

void main()

{

int a=2;

int*p=&a;

int*pold;//记录P指向的地址,为了作为比较使用

pold=p;

//-----------原来的信息

printf("原来的a=%d",a);

printf("原来的p=%x",p);

printf("原来的pold=%x",pold);

//----------进行变化

printf("(*p)++的结果=%d,a的结果a=%d",(*p)++,a);

printf("a的结果a=%d",a);

printf("地址变化的结果p-pold=%x",p-pold);

}

运行结果

程序3

#include"stdio.h"

void main()

{

int a=2;

int*p=&a;

int*pold;//记录P指向的地址,为了作为比较使用

pold=p;

//-----------原来的信息

printf("原来的a=%d",a);

printf("原来的p=%x",p);

printf("原来的pold=%x",pold);

//----------进行变化

printf("a=%d,(*p)++的结果=%d,a的结果a=%d",a,(*p)++,a);

printf("a的结果a=%d",a);

printf("地址变化的结果p-pold=%x",p-pold);

}

程序4

#include"stdio.h"

void main()

{

int a=2;

int*p=&a;

int*pold;//记录P指向的地址,为了作为比较使用

pold=p;

//-----------原来的信息

printf("原来的a=%d",a);

printf("原来的p=%x",p);

printf("原来的pold=%x",pold);

//----------进行变化

printf("*(p++)的结果=%d,a的结果a=%d",*(p++),a);

printf("a的结果a=%d",a);

printf("地址变化的结果p-pold=%x",p-pold);

}

程序5

#include"stdio.h"

void main()

{

int a=2,*p=&a,*q=&a;

printf("%d%d",(*p),a);

printf("%d%d%d",*p++,(*p)++,*q++);

printf("%d",a);

}

程序6

#include"stdio.h"

void main()

{

int a=2,*p=&a,*q=&a;

printf("%d%d",(*p),a);

printf("%d%d%d",(*p)++,*p++,*q++);

printf("%d",a);

}

程序7:

#include"stdio.h"

void main()

{

int a=2,*p=&a,*q=&a;

printf("%d%d",(*p),a);

printf("%d%d%d%d",(*p)++,*p++,*q++,a);

printf("%d",a);

}

程序8:

#include"stdio.h"

void main()

{

int a=2,*p=&a,*q=&a;

printf("%d%d",(*p),a);

printf("%d%d%d",*p++,(*p)++,*q++);

p=&a;q=&a;

printf("%d%d%d%d",a,*p,(*q)++,a);

printf("%d%d%d%d",a,++(*p),++(*q),a);

printf("%d",a);

}

综上所述:

*p++是先取出*p的值,然后让p++

(*p)++是先取出*p的值,让这个值++

*(P++)是先取出*p的值,让p++

所以,*p++等价于*(P++)

而且printf的运行顺序是从右向左运行。而且右++是在整个运算表达式运算完才进行,而且右++的执行顺序是从左到右进行。而左++遇到变量就会立即增加变量的值。

验证printf的运算顺序

#include"stdio.h"

void main()

{

int a=2;

printf("a++=%d,++a=%d,a++=%d",a++,++a,a++);

printf("a=%d",a);

}

热心网友 时间:2023-10-30 18:53

首先你要明白再C语言中*的优先级低于++的,所以对于*++p来说是先将指针p向后移动一位后再取出p所指地址里面的内容
而++*p是先取出p所指地址里面的内容,然后再将取出的这个值自加1.

热心网友 时间:2023-10-30 18:54

*++p为
先p加1,
然后取值
++*p为
先取p的值,然后值加1.
例:
假设
p
指向一个数组a[5]的首地址
a[5]={0,2,4,8,12};
两个变量q1和q2
,
其中q1=*++p
;
q2
=
++*p
;
则相应的值为:q1=2;
q2=1
期待纠错......
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
vivox9和x9i有什么区别 ...设置原则跟构造要求。构造柱的设置原则跟构造要求是什么_百度... ...的U型钢筋锚环要几道?在哪里可以找到依据啊 ...月末不含税库存金额1065000元,请计算门店库存天数 公蟹吃什么 公蟹吃什么东西 爬行健身操功能和原理 锻炼爬行的好处有哪些呢 爬行健身法有什么优缺点 檀木如何粘合 成田剑先生还为哪些日本动漫配音,有名一点滴。谢谢了,大神帮忙啊 C语言指针中的++p与++*p的区别 C语言里p++和(*p)++有区别吗 c语言指针问题,输入函数中*p和p的区别 C语言小问题~已经定义int *p 那后面程序中分别提到p和*p有何区别? c语言 *p++与(*p)++、*(p++)三者异同? C语言指针*p与p有什么区别?printf输出表列要哪个?为什么? C语言中的指针*p和p有什么区别? C语言 *p和p有什么区别啊?为什么最后输出*p=20啊? 月什么软件可以看好的书籍 除了宜搜小说,还有哪些软件可以看本地书籍 什么软件可以看一些书籍的? 像古代书籍格式的看书软件 有什么软件可以看各类书籍! 什么软件可以听禁书 哪个软件能找到古书? 岗位外包与员工派遣有什么区别? 液压缸双向闭锁的原理 请问:签着外包合同,但是直接干着劳务派遣的事。求不用走人方式解决答案。 和公司签订劳动合同,社保是第三方代缴,公司存在什么法律风险,如何规避 企业外包之后企业也丧失了部分控制权由此带来了很大的风险如何控制外包风险_百度问一问 资产负债表中的存货栏,应包括哪些会计科目 肉夹馍店怎么起名 肉夹馍店名字大全 自己开个肉夹馍店,起什么名字好呢?~老潼关的馍 外卖胡辣汤肉夹馍应该取什么名? 肉夹馍起名 肉夹馍面馆起名字大全 自己开个肉夹馍店,起什么名字好呢?~老潼关馍 我想给我的小吃店起个名字,把我朋友肖珊名字用上。主要经验酸辣粉米线肉夹膜还有奶茶和一些小吃 在微信上卖自己做的肉夹馍小吃该怎么起名? 明知相思苦,+偏要苦相思,+若问相思为何苦,+只因相思已入骨。这段话怎么回_百度问一问 明知相思苦,偏要苦相思? 明知相思苦偏要苦相思的上一句是什么 明知相思苦,偏要苦相思;若问相思为何苦,只因相思已入骨明知相思苦,偏要苦相思。若问相思为何苦,只因_百度问一问 明知相思苦,还是苦相思什么意思 明知相思苦,偏又苦相思。出自何处?类似意义的诗句分别有哪些? 《明知相思苦》。偏偏苦相思。有缘无分,是人事的悲哀,有份无缘,却是人生的无奈? 《明知相思苦,偏要苦相思》求上联 迅捷FW326R无线路由器上网怎么设置 注册个人域名要注意什么,怎样注册个人域名好