*p++和(*p)++的区别?

#include<stdio.h>

int main()
{
	int array[5] = {1,2,3,4,5};
	int *p = array;
	int num = *p++;
	printf("%d %d\n", num, *p);

	return 0;
}

/*1 2*/

num=*p++;/ num=*(p++);这两个是一个意思

按照优先级理解,++比*高,所以先算p++,再取值。但是千万不要以为是指针先向后移动,然后再取值,因为++是后置操作,也就是语句执行完了再自增,所以执行过程还是先取值,把1赋值给num,语句执行完了,p再向后移动,指向2。

第二种理解:p是一个指针,指向数组的第一个元素,而后置++的特点就是这条语句运算完后在执行+1的操作,所以先不用管它,那语句就变成了*p,*p就是p指向元素的值,就是1,所以num就是1,注意这条语句执行完后还有++的操作,所以p指向了数组的第二个元素,*p取的是数组第二个元素,printf输出1  2。

#include<stdio.h>

int main()
{
	int array[5] = {1,2,3,4,5};
	int *p = array;
	int num = (*p)++;
	printf("%d %d\n", num, *p);

	return 0;
}

/*1 2*/

后置++可以先不管它,语句也就变成了num = *p;num=1,赋值语句结束后还有个自增操作,跟刚才的不一样,这一次因为有了括号,所以是*p自增,所以是数组的第一个元素+1,1变成了2,所以printf输出的时候一个是1,一个是2。

这两个自增的区别就是自增的对象不一样,*p++先取值,在对地址+1,(*p)++先取值,然后指针指向的内容+1。

*p++;   //取值,然后地址+1

(*p)++; //取值,然后值+1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值