gpt4 book ai didi

c++ - 指向字符数组 C++ 的指针的问题

转载 作者:IT王子 更新时间:2023-10-28 23:28:02 25 4
gpt4 key购买 nike

我认为应该编写一段非常简单的代码,但由于我不明白的原因无法编译。

以下简化代码将无法编译:

char buffer[9] = "12345678";
char* pBuffer = &buffer;

编译器(g++)抛出以下错误:

错误:初始化时无法将'char (*)[9]' 转换为'char*'

C++ 并不完全是我的“原生”语言,但我所看到的所有地方都告诉我这应该可以工作。非常感谢任何想法或建议。

最佳答案

不是取数组的地址,而是写

char buffer[9] = "12345678";
char *pBuffer = buffer;

编辑:这是什么意思?

  • 长度为 nT 类型数组是 n T 的(连续)序列>在内存中。

  • 指针是内存地址。

所以 for example ,如下代码

char a[5] = "hello";
char *p = "world";

对应内存中的以下情况:

Comparing an array to a pointer.

在您的代码中,您创建了一个数组

char buffer[9] = "12345678";

与创建数组 char a[5] = "hello" 的方式相同。您打算创建一个指针 char * 指向数组的第一个字符,就像上面的 char *p 指向数组的第一个字符 "世界”.

当使用“类型数组”(此处为 buffer)类型的表达式时,它总是“衰减”为指向第一个元素的指针,除非

1. 表达式作为sizeof的操作数(在sizeof(buffer)中,buffer不会衰减为指针)

2.表达式作为unary &的操作数(在&buffer中,buffer不会衰减为指针)

3. 表达式是字符数组的字符串字面量初始值设定项(在 char someBuffer[3] = "ab" 中,字符串字面量 "ab ",数组,不会衰减为指针)。

这是在 section 6.2.2.1 of the standard 中列出的:

729 Except when it is the operand of the sizeof operator or the unary & operator, or is a string literal used to initialize an array, an expression that has type “array of type” is converted to an expression with type “pointer to type” that points to the initial element of the array object and is not an lvalue.

因此,创建指向数组中第一个字符的指针 char *pBuffer 所需要做的就是写入

char *pBuffer = buffer;

关于c++ - 指向字符数组 C++ 的指针的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14189967/

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