静态char *的数组

时间:2013-05-30 07:38:08

标签: c++ c arrays

我想知道C ++是否正确:

static char *arrayExample[]  = 
{
    "a",
    "b",
    "c",
    "d",
    "e",
    "f",
    "g",
    "h"
};

2 个答案:

答案 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 *