引用我读过的一篇文章:
*…考虑以下两个变量:

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

s6只为6个字节分配空间;s7为10个字符(通常为-6个字符)再加上4个指针变量分配空间*
想知道谁拥有s6的地址(数组中第一个字符的地址)?如何为指针保存4个字节?

最佳答案

简单地说,它不存储在程序的任何地方。只有编译器会跟踪它。
引擎盖下:
s6表示“地址xxxxxxx:一个6字节的块,保存值'H', 'e', 'l', 'l', 'o', 0
s7表示“地址YYYYYYYY:一个四字节的块,保存值ZZ, ZZ, ZZ, ZZ
*s7表示“地址zzzzzzz:一个字节的块,保存值'H'
程序实际上不必在任何地方存储值xxxxxxx;编译器只需在您使用s6的任何地方插入值xxxxxxx。
类似地,程序不必在任何地方存储yyyyyyyyyy,但它确实存储zzzzzz,因为您特别说过(您说过要将值zzzzzz赋给变量s7)。
但是,如果您想将xxxxxxx存储在某个地方,您可以轻松地执行以下操作:

char my_pointer* = &s6;

现在my_pointer表示“address wwwwww:a block of four bytes,holding the valuesXX, XX, XX, XX”。
这是假设你在一个有四个字节指针的系统上;现在,指针更有可能是八个字节,或者64位。

10-06 04:49