为什么我得到这些内存地址?

时间:2014-12-15 00:41:22

标签: c pointers memory

我想知道为什么我会在这个简单的程序中获得这些内存地址。

#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结束。

2 个答案:

答案 0 :(得分:4)

0043064 + 8 = 0040306C;我不知道你从哪里得到00403079。

答案 1 :(得分:1)

0x00403064 + 0x8 == 0x0040306C

请注意,这些数字是十六进制的。

但无论如何,虽然这些字符串不能重叠,但它们不需要在内存中彼此靠近放置。