为了账号安全,请及时绑定邮箱和手机立即绑定

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

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://img1.sycdn.imooc.com//593c0ef80001466316080568.jpg

正在回答

2 回答

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

0 回复 有任何疑惑可以回复我~

错误原因:

①执行第二个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;

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
C++远征之封装篇(下)
  • 参与学习       70919    人
  • 解答问题       514    个

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

进入课程

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信