char* temp[2] 与 char** temp 有什么区别?

问题描述 投票:0回答:2

这是我的代码:

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";
arrays c pointers
2个回答
0
投票
char *temp[2];

声明一个包含 2 个指针的数组。然后您可以分配每个数组元素。

char **temp2;

声明一个指针,但不初始化它。数组的内容没有内存。您必须分配内存并将其分配给指针。

temp2 = malloc(2 * sizeof *temp2);

0
投票

char *temp[2]
是一个由两个指向
char
值的指针组成的数组。

char **temp2
是指向
char
值的指针。

前者表示为两个

char
指针分配内存,因此为这些指针赋值就可以了。

后者是一个未初始化的指针,因此取消引用它会调用未定义的行为。您可能希望使用像

malloc
这样的函数使用动态内存分配来初始化它,但即使这样,您也需要进行错误检查以确保
malloc
在像示例代码那样进行任何分配之前成功。

© www.soinside.com 2019 - 2024. All rights reserved.