指针减法的结果以 元素 为单位,而不是以字节为单位。因此,第一个表达式
1的定义为。
除此之外,您确实应该在宏中使用括号:
#define my_sizeof(x) ((&x + 1) - &x)#define my_sizeof(x) ((char *)(&x + 1) - (char *)&x)
否则,尝试
my_sizeof()在表达式中使用可能导致错误。

指针减法的结果以 元素 为单位,而不是以字节为单位。因此,第一个表达式
1的定义为。
除此之外,您确实应该在宏中使用括号:
#define my_sizeof(x) ((&x + 1) - &x)#define my_sizeof(x) ((char *)(&x + 1) - (char *)&x)
否则,尝试
my_sizeof()在表达式中使用可能导致错误。