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

我想用"p->m_iX = 某值;"来进行赋值,在更新指针"++p"时,正好看下p指向的地址和p[i]的地址是否一样,结果却并不相同,为什么?

int main() {
    //堆实例化
    Coordinate *p = new Coordinate[3];
    printf("数组的第1个元素的地址:%x\n", p);
    printf("数组的第1个元素的地址:%x\n\n", &p[0]);

    ++p;
    printf("数组的第2个元素的地址:%x\n", p);
    printf("数组的第2个元素的地址:%x\n\n", &p[1]);

    ++p;
    printf("数组的第3个元素的地址:%x\n", p);
    printf("数组的第3个元素的地址:%x\n\n", &p[2]);
}

结果是:

数组的第1个元素的地址:3bc04b60
数组的第1个元素的地址:3bc04b60

数组的第2个元素的地址:3bc04b68
数组的第2个元素的地址:3bc04b70

数组的第3个元素的地址:3bc04b70
数组的第3个元素的地址:3bc04b80

为什么只有第一个元素的p和&p[0]指代的地址相同?

正在回答

1 回答

如果你采用++p了,那么你这个时候就不能使用p[1]或者是p[2]了,这个时候,你应该是用p[0],如果你不用++p的话,那么你就可以用你现在这个方法了

1 回复 有任何疑惑可以回复我~
#1

Jeffacode 提问者

哦,懂了!就是说,在用了一次++p;后,原先的p[1]现在是p[0]
2015-06-16 回复 有任何疑惑可以回复我~

举报

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

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

进入课程

我想用"p->m_iX = 某值;"来进行赋值,在更新指针"++p"时,正好看下p指向的地址和p[i]的地址是否一样,结果却并不相同,为什么?

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