gpt4 book ai didi

c - 数组表达式未转换为指针 当字符串字面量用于初始化字符数组时

转载 作者:行者123 更新时间:2023-12-01 13:31:48 24 4
gpt4 key购买 nike

简而言之,来自 C:

In most cases, the compiler implicitly converts an expression with an array type, such as the name of an array, into a pointer to the array’s first element.

The array expression is not converted into a pointer only in the following cases:

• When the array is the operand of the sizeof operator

• When the array is the operand of the address operator &

When a string literal is used to initialize an array of char , wchar_t , char16_t , or char32_t

  1. 你能解释一下最后一个项目符号的含义吗?反面例子?最后在书上找不到例子子弹。
  2. 还有为什么是字符数组,而不是其他元素类型?

最佳答案

char *ptr = "Hello OP!!";

ptr 是指向存储在 RODATA 段中的字符串文字的第一个字符的指针。当您取消引用它时,您只能读取而不能写入值,因为字符串文字是常量 char 数组。

char arr[] = "Hello OP!! How are you my friend?";

在这种情况下:

  1. arr 数组分配空间,长度为字面量大小,包括尾随零。
  2. 字符串文字被复制到为arr数组分配的空间

在这种情况下,arr 用作复制字符串文字的内存中的位置。

你可以读写,因为arr元素是读写的

现在回答问题

  • 数组的 sizeof 是所有数组元素的字节大小。如果数组被转换为指针——大小将是指针的大小,这在这种情况下显然是错误的
  • 数组只是内存中容纳其所有元素的连续空间。所以数组的地址永远是这个内存位置的地址
  • 第三种情况我上面已经解释过了

可以看到代码 https://godbolt.org/g/xVL5cR

** 给 TIM 的注释 ** 字符串文字不会转换为任何内容。在 RO 内存中,字符串文字仅存储为末尾带有 NUL(NOT NULL)终止符的 char (wchar_t ....) 数组。

关于c - 数组表达式未转换为指针 当字符串字面量用于初始化字符数组时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45654826/

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