gpt4 book ai didi

c - sizeof 的错误结果

转载 作者:太空宇宙 更新时间:2023-11-04 05:37:52 24 4
gpt4 key购买 nike

我遇到了一个非常奇怪的问题:

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”

所以我想知道为什么,这可能是由我不知道的 ot 大小引起的...我请求你的帮助,提前感谢你的时间,祝你晚上愉快! :D

最佳答案

你误解了 0 + 18 = 240 这是正确的结果!

0 是 mem_chunk->prev 的值。18 是你的结构的大小;请注意,这是六边形的。

你有指针运算,所以mem_chunk->prev + sizeof(*mem_chunk)不是通常的0+18,而是假设的第19个元素的地址从 0 开始的数组。所以 0x18*0x18=0x240 为六进制。在指针算术中,将一个数字加到一个指针上计算出一个移动; int 用作与指针的距离,距离的单位是指针指向的对象的类型。如果您将 1 加到一个 int 指针,您将计算内存地址 一个 int 之后...

在你的情况下:mem_chunk->prev+1 不是 10x18mem_chunk->prev+2 不是 20x30

还要注意格式,对指针使用 %p,对返回 a 的 sizeof 使用 %lx(C99 中的 %zx) 长整数

关于c - sizeof 的错误结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28139671/

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