在我的代码中,我尝试执行以下操作:
// 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**
读取为“指向常量字符的(非常量)指针的(非常量)指针”。您可以修改strings
和strings[n]
,但不能修改strings[n][m]
。
const char*
只是一级。您可以修改 chars
,但不能修改 chars[n]
。
使 strings[n]
不可修改的方法是使用 const char* const*
- “指向 的(非常量)指针>const 指向常量字符的指针”
另请注意,在您的示例中,strings
和 chars
未初始化。您需要先初始化它们,然后才能实际访问它们。
This question有如何读取 C 声明的方法。在这些简单的情况下,您从右向左阅读。
关于const char** 与 const char* 突变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56295788/