【发布时间】:2019-05-24 15:42:26
【问题描述】:
在我的代码中,我尝试做以下事情:
// 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 标识符,数组字符是不可分配的。为什么?
【问题讨论】:
-
基本上你想要的是
const char* strings[N]和const char chars[N]其中N是元素的数量。要么,要么你在运行时使用malloc。在第二种情况下,您可以使用const char chars[N] = { 'a', 'b' }或直接删除const... -
如果标准 not 允许在最前列的类型上使用 prefix-const(iow,要求
const紧跟在类型,之前不是可选的,但只适用于最外面的类型)。 -
@DeiDei 为了一致性和统一性(也许是代码本身的性质),我反对使用数组括号。 (我宁愿做 *(ptr +N) = value 而不是 ptr[N])
-
@Ace 总有一天你会厌倦这样做,而真正厌倦,我的意思是厌倦了维护你的代码的同事要求你破译它,因为你是唯一的做这件事的团队中的一个。只是公平的警告。