【发布时间】:2017-01-28 18:38:30
【问题描述】:
我试图理解为什么以下 C++ 代码无法编译
int main () {
int a[10];
int (*p)[10] = &a;
int *q = static_cast<int *>(++p);
}
如果不是很明显,我试图做的是使用指针算法找到指向数组末尾的指针。
到目前为止,我的理解是p 具有指向十个整数数组的类型指针,表达式++p 也是如此。通常,我可以将一个 int 数组分配给一个指向 int 类型指针的变量,但这在递增指针 ++p 上失败。
我第一次尝试不使用static_cast,但这也没有用。
【问题讨论】:
-
你可以把
p变成int*:int* p = a; int* q = ++p; -
@GregKikola 是的,我可以这样做,但这不是我想做的。我认为这两种情况下的指针算法应该是不同的。
-
哦,我误解了,我没有看到关于希望
q指向数组末尾的注释。在这种情况下,您可以使用int *q = a + 10;。或者,使用 C++11,int* q = std::end(a);(只包括<iterator>)。 -
即使你让它工作,下一个看这段代码的人也可能不会理解它。我认为 (a+10) 更清晰。
-
@brianbeuning 我不打算在生产代码中使用它。我只是在玩指针......
标签: c++ arrays pointers pointer-arithmetic