感谢您的帮助。
托拜厄斯
答案 0 :(得分:4)
作为一般类型,它是一个指向常量T的指针数组。 尝试在其中加上名称:
T const *x[];
并应用通常的规则:[]比*更紧密,所以它是一个
阵列。然后*表示它是一个指针数组,和
最后,他们都指向一个恒定的T.(像往常一样const
修改它左边的任何内容。)
当然,作为参数,数组类型将转换为 一个指针类型,所以我们最终得到一个指向指针的指针 常数T.这也可以写成:
T const **
如果删除常量,则最终得到:
T **
与T const**
不同。
您无法将T**
或T*[]
传递给第一个的原因
形式是为了防止这样的事情:
void f(int const* p1[]; int const* p2)
{
p1[0] = *p2;
}
int const x = 10;
int* px[1];
f(px, &x);
*px[0] = 20; // Where does this write?
使用[]编写声明的事实就是这样 情况,误导,因为指针指针的规则仍然存在 应用
答案 1 :(得分:3)
它是一个指向T类型常量对象的指针数组(即指针可以更改,但不能调用非const函数,或者修改这些对象上的不可变数据成员)。 T * []是指向非常量对象的指针数组。你不能将T * []传递给需要T const * []的函数,因为它会使指针的const正确无效。
有关详细信息,请参阅here。