为什么第三个对象数组没有数据?

来源:2-3 [C++]对象数组实践(二)

qq_第二次_1

2017-06-10 23:24

int main(void)

{

//堆区实例化对象数组

Coordinate coor[3];

coor[0].m_iX=10;

coor[0].m_iY=10;


coor[1].m_iX=20;

coor[1].m_iY=20;


coor[2].m_iX=30;

coor[2].m_iY=30;


//栈区实例化对象数组

Coordinate *p=new Coordinate[3];

p->m_iX=1;

p->m_iY=1;

p++;

p[0].m_iX=2;

p[0].m_iY=2;//其实是第二个对象数组

p++;

p[1].m_iX=3;

p[1].m_iY=3;//其实是第三个对象数组



for(int i=0;i<3;i++){

cout << "coor_x:" << coor[i].m_iX << endl;

cout << "coor_y:" << coor[i].m_iY << endl;

}

for(int j=0;j<3;j++){

cout << "m_iX:" << p->m_iX << endl;

cout << "m_iY:" << p->m_iY << endl;

p--;//将p 从 下标为4 往 0 倒着回

}


p++;

delete []p;

p = NULL;

system("pause");

return 0;

}

http://img.mukewang.com/593c0ef80001466316080568.jpg

写回答 关注

2回答

  • qq_君不闻_0
    2017-07-06 15:06:26

    执行第二个p++时,指针头已经在第三个对象数组了,所以是p[0]不是p[1]

  • JoeyKyeo
    2017-06-11 01:41:27

    错误原因:

    ①执行第二个p++时,指针变量已经指向第三个对象数组

    ②此时想要给第三个对象数组赋值只能用p[0].m_iX或p->m_iX

    ③而此时如果是给p[1].m_iX赋值,则表示第四个对象数组, 而你实例化对象数组时最大只有三个对象数组

    修改如下:

    ①去掉第二个p++

    ②或者p[1].m_iX = 3;  p[1].m_iY = 3;   改为   p[0].m_iX = 3;   p[0].m_iY = 3;

    ③或者改为  p->m_iX = 3;  p->m_iY = 3;

C++远征之封装篇(下)

封装--面向对象三大特征之一,通过案例让C++所学知识融会贯通

70915 学习 · 514 问题

查看课程