我尝试过实现 sizeof 运算符。我是这样做的:
#define my_sizeof(x) ((&x + 1) - &x)
但对于任一数据类型,结果总是为“1”。
然后我用谷歌搜索了一下,发现了以下代码:
#define my_size(x) ((char *)(&x + 1) - (char *)&x)
如果是的话,代码就可以工作类型化的,我不明白为什么。这段代码也完美地填充了结构。
它还致力于:
#define my_sizeof(x) (unsigned int)(&x + 1) - (unsigned int)(&x)
谁能解释一下如果类型转换的话它是如何工作的?
指针减法的结果是elements而不是以字节为单位。因此第一个表达式的计算结果为1
根据定义。
除此之外,您确实应该在宏中使用括号:
#define my_sizeof(x) ((&x + 1) - &x)
#define my_sizeof(x) ((char *)(&x + 1) - (char *)&x)
否则尝试使用my_sizeof()
在表达式中可能会导致错误。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)