gpt4 book ai didi

c - 地址占用多少字节?

转载 作者:太空宇宙 更新时间:2023-11-04 00:38:29 26 4
gpt4 key购买 nike

基本上我的问题是单个地址占用/拥有多少字节?

我的意思是 char 在我的平台上占用 1 个字节并有 1 个地址。但是 int 需要 4 个字节。这个 int 占用多少个地址?它仍然只有 1 个地址还是有 4 个?

例如:

char c = 'A'; //Address at 0xdeadbeee
int i = 45846; //Address at 0xdeadbeef
int* iPtr = &i;
iPtr++; //Address at 0xdeadbef3 now

0xdeadbeef0xdeadbef3 之间的地址会发生什么?它们都是为 i 保留的吗?当我指向 0xdeadbeee(应该恰好是一个地址 | 字节或 i 下的任何内容)并更改它的值时,i 会发生什么?

编辑:对于那些仍然会回答的人,我不想知道整数有多大。我想知道当占用 4 个字节的内存时它是否也有 4 个地址,以及当更改其中一个地址的值时会发生什么(如果它有 4 个地址)。

我希望现在更清楚了。

最佳答案

内置类型(char、short、int、long)的大小是特定于实现和特定于平台的。如果我们假设您的 int 是 32 位,那么我们可以解决您的一些问题:

如果i位于0xdeadbeef,那么0xdeadbeef、0xdeadbef0、0xdeadbef1和0xdeadbef2字节地址都将用于存储。如果您将 iPtr 设置为 0xdeadbeee 并写入一个值,则 0xdeadbeee 和以下三个地址将包含您写入的值。如果您随后尝试读取 ci,您会发现该值已损坏。

需要考虑的一些事情:并非所有架构都允许字节寻址。 char 在您的系统上可能是一个字节,但由于限制,可能会保留 4 个字节。同样,您可能无法读取或写入指向非对齐地址的指针。例如,一个只能访问 32 位边界内存的系统只能访问 0xdeadbeec0xdeadbef0

关于c - 地址占用多少字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19597984/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com