我尝试过实现 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)
任何人都可以解释一下如果类型转换它是如何工作的吗?
最佳答案
指针相减的结果在元素中,而不是在字节中。因此,根据定义,第一个表达式的计算结果为 1
。
除此之外,您真的应该在宏中使用圆括号:
#define my_sizeof(x) ((&x + 1) - &x)
#define my_sizeof(x) ((char *)(&x + 1) - (char *)&x)
否则尝试在表达式中使用 my_sizeof()
会导致错误。
关于c - sizeof 运算符的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14171117/