C语言中 *(p++) p++ *p++ ++*p (*p)++ 分别是什么意思

如题所述

*(p++):取出指针p所指地址中的数据,指针+1          

p++         :  指针+1                                                      

*p++        :  等同于 *(p++)                                     

++*p        : 指针所指地址中的数据+1                            

(*p)++  : 取地址数据,地址中的数据+1                      

********************************************************

tip1.  * 与 ++的优先级相同的,它们的结合性都是自右向左

tip2.  ()的优先级高于*和++

****************************************************************

优先级、结合性分析:     

*p++      由(tip1)可知,p先与++结合,再与*结合,

*(p++)     由(tip2)可知,p先与++结合,再与*结合

得出结论:*p++等同于 *(p++)

**********************************************************

变量分析

*(p++)      由(tip2)可知,是p先与++结合,变量是  p, 

得出结论:*(p++)      // 是指针所指的地址值在增加            (不同点)

(*p)++       由(tip2)可知,p先与*结合,得到*p

是*p与++结合,变量是  *p

得出结论:(*p)++    //是指针所指地址中的数据值在增加   (不同点)

******************************************************************** 

小结:    

因为(tip1、tip2)可得出:   

1.指针所指地址自增

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

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

2.指针所指地址中数据自增

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

(*p)++

*********************************************************

(左自增:先求变量变化,再输出)   

形式:++p、*++p、++*p、++(*p)、

(右自增:先输出变量当前所指值,再求变量的变化)

形式:p++、*p++、(*p)++、*(p++)

哪个是变量:(在tip1、tip2的基础上)与 ++  结合的整体是变量

++p        :  p   是变量、 

++(*p):    (*p)是变量

***********************************************************

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2018-03-07
*p++ 先取指针p指向的值(数组第一个元素1),再将指针p自增1;
(*p)++ 先去指针p指向的值(数组第一个元素1),再将该值自增1(数组第一个元素变为2
*++p 先将指针p自增1(此时指向数组第二个元素),* 操作再取出该值
++*p 先取指针p指向的值(数组第一个元素1),再将该值自增1(数组第一个元素变为2)本回答被网友采纳
第2个回答  2012-02-28
#include<stdio.h>

int main()
{
int a[2]={1,2},*p=a;

// printf("%d\n",*p++); //等于1
//printf("%d\n",*++p); //等于2
// printf("%d\n",(*p)++); //等于1
//printf("%d\n",++(*p)); //等于2
return 0;
}
第3个回答  2012-02-29
一般能少这样用指针就不要用这种奇怪的表达方式,除非是考试。
指针说穿了,就是一个存着内容地址的数据。
比如,声明一个*p,不管*p是什么类型,p自身的数据只可能是2byte或者4byte的数据,如0x2000,这个值,实际上是p指向的数据的地址;
而*p是p指向的内容的数据,取决于声明时的类型,长度由类型决定,比如char *p;byte *p;long *p;而内容就是char型的值,比如0xFA;
因此你就可以看出上面的问题的答案了。
*(p++),是地址p先++,然后,再取出该地址的值。
p++,直接就是地址加1。
*p++,*比++的优先级高,所以,是*p指向的内容被++了。
++*p,同理,与*p++结果一样。
(*p)++,这个与*p++结果一样。本回答被网友采纳
第4个回答  2012-02-28
这样学习C++累不

C语言中 *(p++) p++ *p++ ++*p (*p)++ 分别是什么意思
(p++) 由(tip2)可知,p先与++结合,再与*结合 得出结论:*p++等同于 *(p++)变量分析:(p++) 由(tip2)可知,是p先与++结合,变量是 p,得出结论:*(p++) \/\/ 是指针所指的地址值在增加 (不同点)(*p)++ 由(tip2)可知,p先与*结合,得到*p 是*p与++结合,...

C语言中 *(p++) p++ *p++ ++*p (*p)++ 分别是什么意思?
(*p)++ 先去指针p指向的值(数组第一个元素1),再将该值自增1(数组第一个元素变为2 ++p 先将指针p自增1(此时指向数组第二个元素),* 操作再取出该值 ++*p 先取指针p指向的值(数组第一个元素1),再将该值自增1(数组第一个元素变为2)

在C语言中, *(p++)、 *(++p) 、*++p 、*p++有什么区别
我看书中解释:*p++:是先取出*p的值,再使p加1 \/\/p是个指针,给p加1,相当于让p指向了x所在地址的下一个位置,而对于x则是没有任何影响 (*p)++:是使*p的值加1.\/\/*p则是p指向的位置对应的值,题目中是*q,所以此时的*q就是x的值,为3,当输出*q之后,再给*q即x自加1,所以x就...

*p++ *(p++) (*p)++ p++有何区别
指针运算符*与自加运算符++优先级相同,属于单目运算符,结合方向自右向左,所以*p++与*(p++)等价,表示分别输出内存中存放的值。(*p)++,存放在内存中的值自加1,p++表示向高地址方向1个存储单元。

关于C语言指针变量*p++ 、*(p++)、(*p)++的区别
c语言的指针,里面存放的是 物理地址。而*p 是 取内容的意思,即 取当前存放内容对应(指向)的地址 里面的内容。而p++ 就是把 p里面的内容+1个单位,因为 p存的是地址,所以是 地址+1,也就是下一个地址。那么指针p 就指向了 下一个地址了。

请教C语言中(*p)++与*p++与++*p与*++p的区别
p++ \/\/它相当于*(p++),首先指针p后移,由于对指针是后缀加,所以p++返回p没后移时的指针,如果是数组,那么表达式的值为指针当前所指元素(指针没有后移时)的值 ++*p \/\/即相当于++(*p),先取p所指向的值,然后施以前缀加,则该表达式的值为p当前所指对象的值+1的结果。++p \/\/相当于*(++...

C语言 指针一节,p++,*p++,*++p,(*p)++是什么意思??请举例说明一下好吗...
假设p是指针(也叫地址),指向 a的第二个元素(即a[2]的地址),也就是说p=0x104 你说的4个在c语言里都叫表达式,表达式就有表达式的值:p++:先取值,再++,所以p++的值是0x104,执行完之后p=0x108 p++,根据c的运算符优先级,*p++=*(p++)。是对(p++)这个地址取值。所以*p++的值...

c语言中*p++ 、*(++p) 、(*p)++的作用分别是什么
p++ 先取到指针p指向的值,即*p,然后再给指针p加1,即让p指向下一个位置 (++p) 先给指针p加1,即让p指向下一个位置,然后取出p此时所指位置的值 (*p)++先取出p当前所指的值,然后给这个值加1,指针所指位置不变

C语言中的指令*p++、(*p)++、*++p和++*p分别有什么不同?
C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,...

C语言 *p++\/*(p)++\/*(p++)\/*p++ - C语言零基础入门教程
一.简介 p++ 与 *(p++) 的区别:*p++ 是先引用 p 的值,再使 p 地址自增 1,等价于 (*p)++;而 *(p++) 是先使 p 地址自增 1,再引用 p 的值。二.*p++ p++ 运算规律是先引用 p 的值,实现 *p 的运算,然后再使 p 地址自增 1。三.*++ p \/ ++ *p ++ p 和 ++ *p ...

相似回答