我有一个很奇怪的问题:
typedef struct s_mem_chunk
{
void *addr;
unsigned int size;
short is_alloc;
struct s_mem_chunk *prev;
} t_mem_chunk;
#include <stdio.h>
#include <stdlib.h>
int main()
{
t_mem_chunk *mem_chunk;
mem_chunk = malloc(sizeof(*mem_chunk));
mem_chunk->prev = 0;
printf("%x + %x = %x\n", mem_chunk->prev, sizeof(*mem_chunk), mem_chunk->prev + sizeof(*mem_chunk));
return 0;
}
所以这里的代码应该输出:
“0+18=18”
它输出“0+18=240”
所以我想知道为什么,这可能是因为我不知道的尺寸。。。
我请求您的帮助,提前感谢您的时间,祝您晚上愉快!:天
最佳答案
你误解了0+18=240,这是正确的结果!
0是mem_chunk->prev
的值。
18是你的结构尺寸,小心这是六角的。
你有指针算法,所以mem_chunk->prev + sizeof(*mem_chunk)
不是通常的0+18,而是从0开始的数组的第19个元素的地址。所以0x18*0x18=0x240。在指针算术中,向指针添加数字可计算移动;int
用作与指针的距离,距离单位是指针指向的对象类型。如果您将1添加到int
指针,则在。。。
就你而言:int
不是mem_chunk->prev+1
而是1
,0x18
不是mem_chunk->prev+2
而是2
。
还要注意指针的格式和用法0x30
,以及返回a%p
的sizeof的%lx
(C99中的%zx
)。
关于c - sizeof的结果错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28139671/