C:为什么这个char数组的地址是6字节?

C: Why is this address of the char array 6 bytes?

我以为地址是 4 个字节,为什么这个地址是 6 个字节?

我在 Ubuntu 20.04 的虚拟机上使用 gcc 进行编译,如果这很重要,我有一个 x64 处理器。

#include <stdio.h>

int main() {

        char char_array[3] = {'a', 'b', 'c'};
        printf("Address of char_array: %p\n", char_array);
}
$ gcc -g test.c
$ ./a.out
Address of char_array: 0x7ffc0ff83645

首先,C 指针通常是 4 字节(32 位)或 8 字节(64 位),但这不能保证也不应假设。

其次,您不能计算十六进制内存地址中的数字,并假设数字除以二就是系统用于指针的字节数,因为不会打印前导零。例如,如果您的内存地址是 0x00000020 并且您使用 %p 说明符将其传递给 printf(),您将得到 0x20.

的输出

如果你想知道系统中 char* 的字节宽度,你应该尝试 printf(“%zd\n”,sizeof(char*));