我想知道C ++是否正确:
static char *arrayExample[] =
{
"a",
"b",
"c",
"d",
"e",
"f",
"g",
"h"
};
答案 0 :(得分:5)
我想知道在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文件)中可见。如果这是你的意图(你不打算在翻译单位之间分享),那就完全可以。
希望这有帮助。
答案 1 :(得分:0)
如果您尝试使用-Wall
进行编译,编译器会发出警告
警告:已弃用从字符串常量转换为'char *'
“x”常量字符串数组使数组初始化,而声明仅为
static char *
每个说法都没错,但你可以尝试修改数组中的项目,如
*arrayExample[2] = 'x'; // runtime error / crash / undefined behavior
添加 const 会删除编译器警告,并阻止您编写一些会覆盖只读值的代码,这些代码值会编译,但会在运行时崩溃。当尝试覆盖数组的const
项之一时,char *
将使编译器停止并显示错误(不是警告)。
static const char *