何时使用 const char * 何时使用 const char[]

2024-04-29

我知道它们是不同的,我知道它们有何不同,并且我阅读了我能找到的所有关于char* vs char[]

但所有这些答案都没有告诉我们什么时候应该使用它们。

所以我的问题是:

你什么时候使用

const char *text = "text";

你什么时候使用

const char text[] = "text";

有什么指导方针或规则吗?

举个例子,哪个更好:

void withPointer()
{
    const char *sz = "hello";
    std::cout << sz << std::endl;
}

void withArray()
{
    const char sz[] = "hello";
    std::cout << sz << std::endl;
}

(I know std::string也是一个选项,但我特别想了解char指针/数组)


两者截然不同,首先:

  1. 第一个创建一个指针。
  2. 第二个创建一个数组。

继续阅读以获取更详细的解释:

数组版本:

char text[] = "text"; 

创建一个足够大的数组来容纳字符串文字“text”,包括它的NULL终结者。数组text用字符串文字“text”初始化。该数组可以稍后修改。此外,即使在编译时数组的大小也是已知的,所以sizeof可以使用运算符来确定其大小。


指针版本:

char *text  = "text"; 

创建一个指向字符串文字“text”的指针。这比数组版本更快,但指针指向的字符串不应更改,因为它位于只读实现定义的内存中。修改这样的字符串文字会导致未定义的行为.

事实上,C++03 不赞成使用没有const关键词。所以声明应该是:

const char*text = "text";

还有,你需要使用strlen()函数,而不是sizeof查找字符串的大小自从sizeof运算符只会给出指针变量的大小。


哪个版本更好?

取决于用途。

  • 如果不需要对字符串进行任何更改,请使用指针版本。
  • 如果您打算更改数据,请使用数组版本。

编辑:我刚刚注意到(在评论中)OP寻求以下之间的差异:

const char text[] and const char* text

好吧,除了有关修改字符串文字的那一点之外,上述不同点仍然适用。随着const限定数组test现在是一个包含类型元素的数组const char这意味着它们不能被修改。

鉴于此,我会选择数组版本而不是指针版本,因为指针可以(错误地)轻松地重新定位到另一个指针,并且可以通过另一个指针修改字符串,从而产生 UB。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

何时使用 const char * 何时使用 const char[] 的相关文章

随机推荐