区别:
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);
}
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先后移,...