gpt4 book ai didi

关于大小的字符数组与字符指针

转载 作者:太空宇宙 更新时间:2023-11-04 05:11:43 24 4
gpt4 key购买 nike

引用我读过的一篇文章:

*...考虑以下两个变量:

char s6[ ] = "hello", *s7 = "hello";

s6 恰好为 6 个字节分配空间; s7 为 10(通常)分配空间 - 6 个用于字符,另外 4 个用于指针变量。*

想知道谁拥有 s6(数组中第一个字符的地址)的地址? s6 如何“保存”指针的 4 个字节?

最佳答案

简而言之,它不会存储在程序的任何位置。只有编译器会跟踪它。

引擎盖下:

  • s6 表示“地址 XXXXXXXX:六个字节的 block ,包含值 'H'、'e'、'l'、'l'、'o'、0
  • s7 表示“地址 YYYYYYYY:四个字节的 block ,包含值 ZZ, ZZ, ZZ, ZZ
  • *s7 表示“地址 ZZZZZZZZ:一个字节的 block ,包含值 'H'

程序实际上不必在任何地方存储值 XXXXXXXX; 编译器 只是在您使用 s6 的任何地方插入值 XXXXXXXX。

同样,该程序不必在任何地方存储 YYYYYYYY,但它确实存储了 ZZZZZZZZ,因为您明确这么说了(您说要将值 ZZZZZZZZ 赋给变量 s7)。

不过,如果您想将 XXXXXXXX 存储在某处,您可以轻松地这样做:

char my_pointer* = &s6;

现在 my_pointer 表示“地址 WWWWWWWW:四个字节的 block ,包含值 XX, XX, XX, XX”。

附言这是假设你在一个有四字节指针的系统上;现在,指针更可能是八个字节或 64 位。

关于关于大小的字符数组与字符指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56929583/

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