新人请教有关C++数组的问题。

新人请教有关C++数组的问题。

问题描述:

两种编码方式感觉没有任何差别,但是结果就是不一样。
方式一:(正确的方式)
#include
using namespace std;
int main()
{
int a[] = { 1,3,5,7,9 }, i, * p;
for (p = a;p < a + 5;)
{
cout << "a[" << p - a << "]=";
cout << *(p++) << "\t";
}
cout << endl;
}
输出结果为
a[0]=1 a[1]=3 a[2]=5 a[3]=7 a[4]=9

方式二:(错误的方式)
using namespace std;
int main()
{
int a[] = { 1,3,5,7,9 }, i, * p;
for (p = a;p < a + 5;)
cout<< "a[" << p - a << "]="<<*(p++)<<"\t";
cout<<endl;
}
输出结果为
a[1]=1 a[2]=3 a[3]=5 a[4]=7 a[5]=9

为什么第二种打法会有这种状况?感觉都是一样的啊。希望能给出详细的解答。

图片说明

cout<< "a[" << p - a << "]="<<*(p++)<<"\t";
这一句里编译器从右往左计算先计算了p++,再算p-a,才得到的a[1]=1这样的结果。
一般最好不要这么写,因为不确定编译器会按什么顺序编译这两部分。
但是更奇怪的是你进行了两次p++却还是得到了13579,你再检查一下程序是不是拷贝错了。