我尝试实现sizeof运算符。 我已经这样做了:
#define my_sizeof(x) ((&x + 1) - &x)
然而,最终结果总是为任一数据类型提供'1'。
然后我通过Google搜索找到了以下代码:
#define my_size(x) ((char *)(&x + 1) - (char *)&x)
当进行类型转换后,代码能够正常工作,但我不明白为什么。该代码也完美地填充了一个结构体。
它也适用于:
#define my_sizeof(x) (unsigned int)(&x + 1) - (unsigned int)(&x)
有人能解释一下如果进行了类型转换,它是如何工作的吗?
unsigned int
是个不好的主意。uintptr_t
更好一些,但仍涉及烦人却无法避免的隐式转换。 - Pascal Cuoqsizeof
。它是C语言的重要组成部分。 - Basile Starynkevitch