假设我们有以下数组:
char *names[]={"Abc", "Def", "Ghi", "Klm", "Nop"};
Run Code Online (Sandbox Code Playgroud)
如果我们要创建一个指向上面数组的指针,为什么要使用如下的二级指针呢?
char **p1 = names;
Run Code Online (Sandbox Code Playgroud)
谢谢。
您names是一个数组[], of char *,即指向 的指针数组char。
同时p1是一个指向指向 的指针char,即指向 的指针char *。您可以分配names给它,因为数组衰减为指向其第一个元素的指针,而 的第一个元素names是指向 的指针char,因此names衰减为指向 的指针char *。这是相同的类型 – char **– 作为p1,因此它们是兼容的。
(另一方面, 的元素类型names不正确;字符串文字是常量,因此它应该是const char *names[],同样p1应该是const char**– 指向指向 的指针的指针const char。)