我想知道它是否正确 C++ :
static char *arrayExample[] =
{
"a",
"b",
"c",
"d",
"e",
"f",
"g",
"h"
};
我想知道用 C++ 编写是否正确
static char *arrayExample[] =
{
"a",
"b",
"c",
"d",
"e",
"f",
"g",
"h"
};
即使您不添加const
修饰符,它是否也能编译?是的,但它具有误导性。字符串字面量存储在内存区域中,源代码的所有字符串字面量一个接一个地保存在该内存区域中。这意味着你不应该弄乱它(在 PC 中它不会发生。但它可以映射到 ROM 内存)。
所以,基本是对的。但是,这个字面量数组并不是要修改的,因此您最好将其重写为:
static const char *arrayExample[] =
{
"a",
"b",
"c",
"d",
"e",
"f",
"g",
"h"
};
您已将其声明为static
:这意味着它只能在其自己的翻译单元中可见(即,它被创建的那个 cpp 文件)。如果那是您的意图(您不打算在翻译单元之间共享它),那完全没问题。
希望这可以帮助。
如果你尝试用编译-Wall
器编译会警告你
警告:不推荐将字符串常量转换为 'char*'</p>
“x”常量字符串数组使数组初始化,而声明只是
static char *
说的没错,但是您可以尝试修改数组的一项,例如
*arrayExample[2] = 'x'; // runtime error / crash / undefined behavior
添加const会删除编译器警告,并防止您编写一些会覆盖只读值的代码,这些代码会编译,但会在运行时崩溃。const
尝试覆盖char *
数组中的一项时,编译器会因错误(而不是警告)而停止。
static const char *