dearMakiseKurisu 2019-10-07 14:47 采纳率: 100%
浏览 134
已采纳

新人请教有关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

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

图片说明

  • 写回答

1条回答 默认 最新

  • JonathanYan 2019-10-07 15:10
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 matlab有关常微分方程的问题求解决
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?
  • ¥100 求三轴之间相互配合画圆以及直线的算法
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable