C 内存地址和数据类型简介
我读了一些关于C语言的内存地址和数据类型的论文,我已经很好地掌握了内容,但是我偶然发现了一些数学知识,我似乎在互联网上的任何地方都搞不懂 假设我创建了两个局部变量C 内存地址和数据类型简介,c,memory-address,C,Memory Address,我读了一些关于C语言的内存地址和数据类型的论文,我已经很好地掌握了内容,但是我偶然发现了一些数学知识,我似乎在互联网上的任何地方都搞不懂 假设我创建了两个局部变量 void foo(void){ int i, j; printf("int i is stored in %p\n", &i); printf("int j is stored in %p\n", &j); } 我得到的输出是 int i is stored in 0x6ffc88 int j
void foo(void){
int i, j;
printf("int i is stored in %p\n", &i);
printf("int j is stored in %p\n", &j);
}
我得到的输出是
int i is stored in 0x6ffc88
int j is stored in 0x6ffc84
在我阅读的文本中,一个整数的大小是4字节(与我的计算机相同)。因此,inti
应该分配4个字节。但是inti
和intj
的内存地址之间的差异只有4位(0100
)
差异不是意味着更大,比如4个字节(0xffffffff
)
请问我在哪里制造混乱 j位于字节地址0x6ffc84,0x6ffc85,0x6ffc86,0x6ffc87处,因此为32位 i位于字节地址0x6ffc88、0x6ffc89、0x6ffc8a、0x6ffc8b处,因此为32位
除了8051这样的微控制器恐怖事件外,现代的非平凡处理器体系结构没有位可寻址存储器。“int i和int j的存储器地址之间的差异仅为4位”-不,这些是字节地址。地址是字节地址。C不允许位寻址。大多数CPU是字节可寻址的。C可以与CPU对话并请求以字节而不是位执行的内存读/写操作。使用C,我们至少可以逐字节读取/写入内存位置,尽管在读取并将其放入整数变量后,我们可以在大多数现代32位和64位平台上使用这些>>对其进行位操作
int
为32位。即四个字节。