取值和自增、自减的运算优先级

今天遇到代码*ptr++,突然懵了,不知道到底那个运算先进行,索性我直接在编译器上运行以下代码,然后瞬间清晰了它们之间的运算顺序!

运行代码:

#include <iostream>
using namespace std;

int main()
{
	int a = 1,b=1,c=1,d=1,e=1,f=1;
	int *ptra = &a, *ptrb = &b, *ptrc = &c, *ptrd = &d, *ptre = &e, *ptrf = &f;

	cout << "old_ptra: " << ptra;
	*ptra++;
	cout<< "\t value: " <<*ptra << "\t\tnew_ptra: " << ptra << endl;

	cout << "old_ptrb: " << ptrb;
	*ptrb--;
	cout << "\t value: " << *ptrb << "\t\tnew_ptrb: " << ptrb << endl;

	cout << "old_ptrc: " << ptrc;
	*++ptrc;
	cout << "\t value: " << *ptrc << "\t\tnew_ptrc: " << ptrc << endl;

	cout << "old_ptrd: " << ptrd;
	*--ptrd;
	cout << "\t value: " << *ptrd << "\t\tnew_ptrd: " << ptrd << endl;

	cout << "old_ptre: " << ptre;
	++*ptre;
	cout << "\t value: " << *ptre << "\t\t\tnew_ptre: " << ptre << endl;

	cout << "old_ptrf: " << ptrf;
	--*ptrf;
	cout << "\t value: " << *ptrf << "\t\t\tnew_ptrf: " << ptrf << endl;



	return(0);
}

运行结果如下:

进而可以得出结论:

*ptra++ = *(ptra++)        因为地址变了,所以地址所指向的值也变成了一个无效值

*ptrb-- = *(ptrb--)            因为地址变了,所以地址所指向的值也变成了一个无效值

*++ptrc = *(++ptrc)        因为地址变了,所以地址所指向的值也变成了一个无效值

*--ptrd = *(--ptrd)           因为地址变了,所以地址所指向的值也变成了一个无效值

++*ptre = ++(*ptre)        先取出指针所指向的值,让其值自增。地址没有变

--*ptrf = --(*ptrf)           先取出指针所指向的值,让其值自减。地址没有变

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值