指针增量 - 很奇怪

时间:2012-10-22 10:01:05

标签: c++ pointers

struct BLA
{
    int size_;

    int size()const{ return size_; }
}

int x;
BLA b[ 2 ];
BLA * p = &b[ 0 ];

b[ 0 ].size_ = 4;
b[ 1 ].size_ = 6;

当我编译这一行时:

x = p->size_ + (p++)->size_;

我收到了预期的结果。但是,当我编译这行时(没有前一行):

x = p->size() + (p++)->size();

然后我得到不同的结果。 'p'不会与上一行同时增加。有人可以解释一下吗?试过VS 2008和VS 2010。

2 个答案:

答案 0 :(得分:5)

在没有插入序列点的情况下单独读取和修改变量是未定义的行为。你已经看到了一个很好的例子。

答案 1 :(得分:1)

在我编译代码时,在我的两个案例中x都是8。两者分别使用,并结合使用。我想要注意的是,使用p ++被认为是未定义的行为,它向我发出警告的那一行是该行。

然而,编译器警告我warning: operation on 'p' may be undefined

编辑:我想在这种情况下注意正确的指针算法:x = p->size_ + (p+1)->size_;