今天在阅读代码的时候再次遇到了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的大小。