array[0]
的地址:008FFE14
array[1]
的地址:008FFE18
代码示例:
int main() {
int array[2] = {1, 2};
printf("%p\n", &(array[0]));
printf("%p\n", &(array[1]));
printf("Integer size: %d\n", sizeof(int));
printf("Word size: %d\n", sizeof(void*));
}
代码输出:
008FFE14
008FFE18
Integer size: 4
Word size: 4
答案 0 :(得分:0)
为什么4个字节需要4个内存地址 - 如果内存地址是4个字节?
因为可能存储int
(大小为4个字节)的相同内存也需要能够存储char
s(大小为1个字节)。
答案 1 :(得分:0)
我想我理解你的困惑。
指针(内存地址)占用多少与它指向的数据类型无关(int
,char
等。)
指针的大小决定了内存中可寻址的位置数。现代系统架构是字节可寻址的。这意味着内存地址是一个字节的地址。
E.g。
使用1字节指针(8位)有2^8 = 256
个可寻址字节。不太有用。
使用2字节指针(16位),有2^16 = 65,536
个可寻址字节。
使用4字节指针(32位),有2^32 = 4,294,967,296
个可寻址字节。那是大约4 GiB的可寻址内存。
使用8字节指针(64位),有2^64 = 18446744073709551616
个可寻址字节。那是大约16 EiB(exbibytes)。
正如您所看到的,指针的大小决定了可寻址的内存量。它与数据占用内存无关。
数据类型的大小确定数据类型在内存中占用的字节数。例如,某些系统上的int
占用32位内存。这是4个字节,即4个可寻址存储器位置。这不受总内存可寻址大小的任何影响。它不受指针大小的影响。