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

2024-11-06 12:30:30
推荐回答(5个)
回答(1):

*(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)是变量

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

回答(2):

*p++ 先取指针p指向或判的值(数组第一个元素1),再将指针p自增1;
(*p)++ 先去指针p指向的值(数组第一个元素1),再将该值自增1(数组第一个元素变为2
*++p 先将指针p自增1(此时指向数组第二个元素),* 操作再取出该值
++*p 先取指针p指向的值(数组第一衫物改个元素1),再将该值自增1(数蚂旅组第一个元素变为2)

回答(3):

#include

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;
}

回答(4):

一般能少这样用指针就不要用这种奇怪的表达方式,除非是考试。
指针说穿了,就是一个存着内容地址的数据。
比如,声明一个*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++结果一样。

回答(5):

这样学习C++累不