我正在编写以下大小的宏,我想知道其中的差异。
#define my_sizeof(type) (char*)(&type+1)-(char*)(&type)
#define my_sizeof(type) (void*)(&type+1)-(void*)(&type)
第一个问题是为什么需要类型转换,我知道如果我不输入它,它总是返回1,我通过运行它来检查它。我想知道它的意义(我的意思是它告诉编译器要做什么)。
2ndly,
它与char *和void *有什么区别。?
非常感谢。
答案 0 :(得分:2)
对于第二个问题:你根本不能这样做,因为没有指针算法用于void指针(或者通常指向不完整类型的指针)。
对于第一部分:根据定义,sizeof(char) == 1
,因此通过将指针转换为char指针,您获得的单位为1而不是sizeof(type)
的单位 - 换句话说,您准确地获得了sizeof(type)
的价值。