谢谢您的帮助.
托比亚斯
作为一般类型,它是一个指向常量 T 的指针数组。尝试在其中添加一个名称:
T const *x[];
Run Code Online (Sandbox Code Playgroud)
并应用通常的规则:[] 比 * 绑定更紧密,所以它是一个数组。然后 * 意味着它是一个指针数组,最后,它们都指向一个常量 T。(像往常一样,const
修改它左边的任何内容。)
当然,作为参数,数组类型会转换为指针类型,因此我们最终得到一个指向常量 T 的指针。也可以这样写:
T const **
Run Code Online (Sandbox Code Playgroud)
如果你删除 const,你最终会得到:
T **
Run Code Online (Sandbox Code Playgroud)
这与 不一样T const**。
不能将 aT**或 a传递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?
Run Code Online (Sandbox Code Playgroud)
在这种情况下,使用 [] 编写声明的事实会产生误导,因为指向指针的规则仍然适用。