两级指针

Sim*_*ity 1 c pointers

假设我们有以下数组:

char *names[]={"Abc", "Def", "Ghi", "Klm", "Nop"};
Run Code Online (Sandbox Code Playgroud)

如果我们要创建一个指向上面数组的指针,为什么要使用如下的二级指针呢?

char **p1 = names;
Run Code Online (Sandbox Code Playgroud)

谢谢。

Ark*_*kku 5

您names是一个数组[], of char *,即指向 的指针数组char。

同时p1是一个指向指向 的指针char,即指向 的指针char *。您可以分配names给它,因为数组衰减为指向其第一个元素的指针,而 的第一个元素names是指向 的指针char,因此names衰减为指向 的指针char *。这是相同的类型 – char **– 作为p1,因此它们是兼容的。

(另一方面, 的元素类型names不正确;字符串文字是常量,因此它应该是const char *names[],同样p1应该是const char**– 指向指向 的指针的指针const char。)