我已经尝试实现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的定义为。
1
除此之外,您确实应该在宏中使用括号:
#define my_sizeof(x) ((&x + 1) - &x) #define my_sizeof(x) ((char *)(&x + 1) - (char *)&x)
否则,尝试my_sizeof()在表达式中使用可能导致错误。
my_sizeof()