指向数组的指针的增量

Sid*_*ord 4 c++ arrays pointers pointer-arithmetic

我试图理解为什么以下C++代码无法编译

int main () {
  int a[10];
  int (*p)[10] = &a;
  int *q = static_cast<int *>(++p);
}
Run Code Online (Sandbox Code Playgroud)

如果不是很明显,我试图做的是通过使用指针算法找到指向数组末尾的指针.

到目前为止,我的理解是p具有十个整数数组的类型指针,表达式也是如此++p.通常,我可以将一个int数组分配给指向int的类型指针的变量,但这会在递增的指针上失败++p.

我第一次尝试没有,static_cast但也没有用.

Sam*_*hik 7

p 具有十个整数数组的类型指针

这是对的.

通常,我可以将一个int数组分配给指向int的类型指针的变量

这也是正确的.除非,如果你比较你的两个语句,你应该看到明显的区别:p不是一个int数组,它是一个指向int数组的指针.因此,差异.

现在,如果你取消引用指向数组的指针,你的结果将是一个表达式,其类型是一个数组(松散地说),并且可以将其衰减为指针:

int *q = static_cast<int *>(*++p);
Run Code Online (Sandbox Code Playgroud)