我想知道为什么我会在这个简单的程序中获得这些内存地址。
#include <stdio.h>
int main() {
char *a = "buffera";
char *b = "bufferbb";
printf("%p %p\n", a, b);
return 0;
}
我得到的输出是。
00403064 0040306C
据说每个字符在内存中占用一个字节(两个十六进制数字),如果字符串a
在内存中占用7 + 1 = 8个字节,并且a
的地址从0x00403064开始,则根据对我来说它应该以0x00403079而不是0x0040306B结束。
答案 0 :(得分:4)
0043064 + 8 = 0040306C;我不知道你从哪里得到00403079。
答案 1 :(得分:1)
0x00403064 + 0x8 == 0x0040306C
请注意,这些数字是十六进制的。
但无论如何,虽然这些字符串不能重叠,但它们不需要在内存中彼此靠近放置。