这是我的代码:
char* temp[2];
char** temp2;
temp[0] = "hellowkfuewoif2o4ig";
temp[1] = "hgjfthe";
temp2[0] = "hello";
temp2[1] = "hello2leh";
初始化
temp
的元素不会产生错误,但初始化 temp2
的元素会产生错误。我相信 char* temp[2]
是一个指向 2 个字符指针的指针,但我不知道这是否正确。我知道 temp2
及其元素需要动态分配内存,但为什么 temp
不需要呢?
我原以为下面的代码会抛出错误,但它从未出现过。
temp[0] = "hellowkfuewoif2o4ig";
temp[1] = "hgjfthe";
char *temp[2];
声明一个包含 2 个指针的数组。然后您可以分配每个数组元素。
char **temp2;
声明一个指针,但不初始化它。数组的内容没有内存。您必须分配内存并将其分配给指针。
temp2 = malloc(2 * sizeof *temp2);
char *temp[2]
是一个由两个指向 char
值的指针组成的数组。
char **temp2
是指向 char
值的指针。
前者表示为两个
char
指针分配内存,因此为这些指针赋值就可以了。
后者是一个未初始化的指针,因此取消引用它会调用未定义的行为。您可能希望使用像
malloc
这样的函数使用动态内存分配来初始化它,但即使这样,您也需要进行错误检查以确保 malloc
在像示例代码那样进行任何分配之前成功。