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;
}
执行第二个p++时,指针头已经在第三个对象数组了,所以是p[0]不是p[1]
错误原因:
①执行第二个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++远征之封装篇(下)
70915 学习 · 514 问题