gpt4 book ai didi

c++ - 何时使用 const char * 以及何时使用 const char []

转载 作者:IT老高 更新时间:2023-10-28 14:00:49 32 4
gpt4 key购买 nike

我知道它们是不同的,我知道它们有何不同,并且我阅读了所有关于 char*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;
}

(我知道 std::string 也是一种选择,但我特别想了解 char 指针/数组)

最佳答案

两者明显不同,首先:

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

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

数组版本:

char text[] = "text"; 

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


指针版本:

char *text  = "text"; 

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

事实上,C++03 不赞成使用没有 const 关键字的字符串字面量。所以声明应该是:

const char*text = "text";

此外,您需要使用 strlen() 函数,而不是 sizeof 来查找字符串的大小,因为 sizeof 运算符只会给你指针变量的大小。


哪个版本更好?

取决于用途。

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

编辑:我刚刚注意到(在评论中)OP 寻求以下区别:

const char text[]const char* text

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

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

关于c++ - 何时使用 const char * 以及何时使用 const char [],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7903551/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com