我试图理解为什么以下C ++代码无法编译
int main () {
int a[10];
int (*p)[10] = &a;
int *q = static_cast<int *>(++p);
}
如果不是很明显,我试图做的是通过使用指针算法找到指向数组末尾的指针。
到目前为止,我的理解是p
具有指向十个整数数组的类型指针,表达式++p
也是如此。通常,我可以将一个int数组分配给指向int的类型指针的变量,但这会在递增的指针++p
上失败。
我首先尝试没有static_cast
,但这也没有用。
答案 0 :(得分:7)
p
具有指向十个整数数组的类型指针
这是正确的。
通常,我可以为一个类型指针的变量赋一个int数组 到int
这也是正确的。除非你比较你的两个语句,你应该看到明显的区别:p
不是一个int数组,它是一个指向int数组的指针。因此,差异。
现在,如果你取消引用指向数组的指针,你的结果将是一个表达式,其类型是一个数组(松散地说),并且可以衰减为指针:
int *q = static_cast<int *>(*++p);