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*));
我以为地址是 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*));