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

如题所述

区别:

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

}

温馨提示:内容为网友见解,仅供参考
第1个回答  2019-07-27
首先你要明白再C语言中*的优先级低于++的,所以对于*++p来说是先将指针p向后移动一位后再取出p所指地址里面的内容
而++*p是先取出p所指地址里面的内容,然后再将取出的这个值自加1.
第2个回答  2020-04-22
*++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
期待纠错......

c语言中*++p与++*p有什么区别
区别:1、*p++与*(p++)是等价的,表示取p所指单元的值,p指向下一单元,即p自加1。2、*p++是指下一个地址。3、(*p)++是指将*p所指的数据的值加一。C编译器认为*和++是同优先级操作符,且都是从右至左结合的,所以*p++中的++只作用在p上,和*(p++)意思一样;在(*p)++中,由于()...

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

*++p与++*p的区别
p是指针变量,*p是指针所以存储单元的内容。所以:*++p是移动指针,即地址的值增1,然后所指的存储单元的内容,即存储单元的内容不自增1。而++*p是存储单元的内容自增1

*++p与++*p各自的含义和区别。
++p指指针p代表的地址先自加1(移动到下一个单元)然后再获取p指向的地址的数据值,如int a[10];p=a;则*++p就是a[1]的值。++*p就为a[0]+1

C语言中的指令*p++、(*p)++、*++p和++*p分别有什么不同?
(p++) 取(p+1)处地址的值。(++p) 取(p+1)处地址的值。和上面一样。++p 取(p+1)处地址的值。和上面一样。p++ 唯一不同的一个,先取p地址处的值,再对p执行+1。C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的...

C语言中*p++与*++p还有++*p有什么区别?
如果*p=1 printf("%d",*p++)就等于1 如果*p=1 printf("%d",++*p)就等于2 这就是前缀和后缀的区别 ++p是指针向前移动一格再取值

C语言指针中的++p与++*p的区别
假设p是一个指针变量。那么++p是将指针变量的值加1,也就是指向下一个指向同类型变量的值。比如:int a[10],*p=a;那么,初始时p指向a[0],++p后,p指向了a[1]。而++*p,是将p指向的值加1。比如*p=2,那么++*p就是把*p变为3。继续,*(++p)是先把p指向下一个元素,在把p指向的值取出来。如p=&a[1...

*p++、(*p)++、*++p、++*p有什么不同
cout <<((*p)++) \/\/2 ++p 先将指针p自增1(此时指向数组第二个元素),* 操作再取出该值 cout << *++p; \/\/ 2 cout <<(*++p) \/\/2 ++*p 先取指针p指向的值(数组第一个元素1),再将该值自增1(数组第一个元素变为2)cout <<++*p; \/\/ 2 cout <<(++*p) ...

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 ...

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

相似回答