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

问题描述 投票:-1回答:1

我以为地址是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 memory-address
1个回答
3
投票

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

其次,你不能计算十六进制内存地址中的数字,并假设数字除以二就是系统使用指针的字节数,因为前导零没有被打印出来。例如,如果你的内存地址是 0x00000020 而你却把它传给了 printf() 随着 %p 指定器,你会得到一个输出为 0x20.

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

© www.soinside.com 2019 - 2024. All rights reserved.