gpt4 book ai didi

c++ - 什么是字符*?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:54:55 24 4
gpt4 key购买 nike

为什么我们需要*

char* test = "testing";

据我了解,我们仅将 * 应用于地址。

最佳答案

这是一个字符:

char c = 't';

它只能容纳一个 character!


这是一个 C 字符串:

char s[] = "test";

它可以容纳多个 characters。上面的另一种写法是:

char s[] = {'t', 'e', 's', 't', 0};

末尾的0称为NUL终止符。它表示 C 字符串的结尾。


char* 存储 C 字符串的起始内存位置。1 例如,我们可以用它来引用同一个数组 s 我们上面定义的。为此,我们将 char* 设置为 sfirst 元素的内存位置:

char* p = &(s[0]);

& 运算符为我们提供了s[0] 的内存位置。以下是编写上述内容的较短方式:

char* p = s;

注意事项:

*(p + 0) == 't'
*(p + 1) == 'e'
*(p + 2) == 's'
*(p + 3) == 't'
*(p + 4) == 0 // NUL

或者,或者:

p[0] == 't'
p[1] == 'e'
p[2] == 's'
p[3] == 't'
p[4] == 0 // NUL

char* 的另一个常见用法是引用字符串的内存位置literal:

const char* myStringLiteral = "test";

警告:此字符串文字不应在运行时更改。我们使用 const 警告程序员(和编译器)不要以下列非法方式修改 myStringLiteral:

myStringLiteral[0] = 'b';  // Illegal! Do not do this for const char*!

这与上面的数组 s 不同,我们 可以修改它。这是因为字符串文字 "test" 在初始化阶段被自动复制到数组中。但是对于 myStringLiteral,不会发生此类复制。 (无论如何,我们要复制到哪里?没有数组来保存我们的数据……只有一个孤独的 char*!)


1 技术说明:char* 仅存储类型为 char 的内存位置。它当然可以只引用一个 char。但是,更常见的是使用 char* 来引用 C 字符串,它们是 NUL 终止的字符序列,如上所示。

关于c++ - 什么是字符*?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6823249/

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