c++指针基本概念

来源:百度知道 编辑:UC知道 时间:2024/06/06 08:42:09
int a[5]={100,200,300,400,500};
int a,b,*p=&a[0];
1.p=&a[0],a=*p++;
2.p=&a[0],b=*++p;
前面a是100,后面b是200,我老是想成前面a也是200,怎么办?
第一个和*(p++)是不是一样的效果?p++中的p不是已经指向下一个了吗?然后用*取出数来?不是200吗?和2有啥不同?
俺菜鸟,理解力较差,熟手帮忙理解一下啊

这里*和++运算符的优先级是一样的,这两个单目运算符结合顺序是从右向左,等价于a=*(p++),这两个主要不同是在++的位置上,b=*++p,++在指针前面,表示先将指针里保存的地址增1,然后再把地址里的东西赋给b,而a=*p++; ++在指针p后面,是表示p先将地址里的东西给a然后再将地址值增1

1.p=&a[0],a=*p++; //先将此时地址对应的值也即100给a,然后地址增1,指向200
2.p=&a[0],b=*++p; //先增1,地址已经指向元素200

a = *p++;这个可以理解成 a = *p; p ++;
b = *++p;这个可以理解成 ++p; b = *p;
赋值和自增的先后,就是 ++p 和 p++ 的区别