关于sizeof()使用的另外一种写法—— sizeof * 变量

本文探讨了在readelf源码中遇到的sizeof()函数的一种特殊用法,即与指针结合使用来比较长度。通过实例解析,展示了sizeof*shdrs等价于sizeof(Elf64_External_Shdr),揭示了其在确保结构体大小正确性上的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天在阅读代码的时候再次遇到了sizeof()的另外一种使用方法,然后自己进行了尝试,现在也仅仅是知道含义,深层次的含义此刻并不得而知,如果读者您知道,希望您能评论一下,谢谢。

在readelf源码中有get_64bit_section_headers()这样一个函数,里面在进行长度比较的时候有下面这样的一段代码:

Elf64_External_Shdr *  shdrs;
Elf_Internal_Shdr *    internal;
unsigned int           i;
unsigned int           size = filedata->file_header.e_shentsize;

if (size < sizeof * shdrs)
{
    if (! probe)
	error (_("The e_shentsize field in the ELF header is less than the size of an ELF section header\n"));
    return FALSE;
}

注意看if判断,sizeof * shdrs, 这里的sizeof可是sizeof()函数的意思,不是变量,shdrs是一个正经的指针。二者居然可以相乘,还没有什么问题!我是第一次见到这种写法。我进行了尝试也只是知道了它和什么等价而已,至于为什么这样,才疏学浅。网上也并没有找到相关的文章。

sizeof * shdrs
sizeof(*shdrs)
sizeof(Elf64_External_Shdr)

上面这三种写法结果是一样的,都是计算Shdr指针指向的结构体Elf64_External_Shdr的大小。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值