C——指向指针的指针与指针数组

C -- pointers to pointers VERSUS array of pointers

在C中,为什么我不能写:

char **expectedPINs01 = { "0", "5", "7", "8", "9" };

因为我得到了:

warning: initialization of ‘char **’ from incompatible pointer type ‘char *’

但是可以这样写:

char *expectedPINs01[] = { "0", "5", "7", "8", "9" };

有什么区别?

当你写 char ** 时,你得到的 space 就足够一个指针了。如果你想让它表现得像一个数组,那么你必须 malloc space 足以满足数组的大小并填写条目。

当你写 char *x[5] 时,你得到足够的 space 5 个指针。

当你使用初始化 shorthand 时,你可以省略 5 因为编译器可以从你的初始化程序中看到你希望有 5 个指针的 space,并且它为它们保留足够的 space,然后使用初始化程序 shorthand 为您填充它们。