今天遇到代码*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) 先取出指针所指向的值,让其值自减。地址没有变