const char** 与 const char* 突变

标签 c pointers char

在我的代码中,我尝试执行以下操作:

// Attempt #1
const char** strings;
strings[0] = "apple";
strings[1] = "orange";
strings[3] = "bananas";

// Attempt #2
const char* chars;
chars[0] = 'a'; // Error
chars[1] = 'b'; // Error again

当我编译 GCC 时,尝试 #1 没问题,但使用尝试 #2 时,它说 LHS 必须可分配。显然,由于 const 标识符,数组 chars 是不可分配的。为什么?

最佳答案

const char** 读取为“指向常量字符的(非常量)指针的(非常量)指针”。您可以修改stringsstrings[n],但不能修改strings[n][m]

const char* 只是一级。您可以修改 chars,但不能修改 chars[n]

使 strings[n] 不可修改的方法是使用 const char* const* - “指向 的(非常量)指针>const 指向常量字符的指针”

另请注意,在您的示例中,stringschars 未初始化。您需要先初始化它们,然后才能实际访问它们。

This question有如何读取 C 声明的方法。在这些简单的情况下,您从右向左阅读。

关于const char** 与 const char* 突变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56295788/

相关文章:

c - 为什么要 char name[0]?

c++ - 读取二进制文件时释放内存

c++ - 此 strncpy 存在哪些安全问题?

c - 使用c程序从文件中读取行

c - 通过将数组作为参数传递给函数来增加数组的大小

c++ - 使用 std::atomic 中的方法时是否隐式调用 load()?

c - 使用 fgets() 从文件读取然后在另一个函数中使用信息

java - 如何将字符转换为字符串?

char数组中的C++ Num到int

c - 在程序集中定位数组