引用我读过的一篇文章:
*…考虑以下两个变量:
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位。