以下代码与使用此类型转换的原因有何区别

时间:2012-02-20 20:31:41

标签: string pointers compiler-construction casting void-pointers

我正在编写以下大小的宏,我想知道其中的差异。

#define my_sizeof(type) (char*)(&type+1)-(char*)(&type)

#define my_sizeof(type) (void*)(&type+1)-(void*)(&type)

第一个问题是为什么需要类型转换,我知道如果我不输入它,它总是返回1,我通过运行它来检查它。我想知道它的意义(我的意思是它告诉编译器要做什么)。

2ndly,

它与char *和void *有什么区别。?

非常感谢。

1 个答案:

答案 0 :(得分:2)

对于第二个问题:你根本不能这样做,因为没有指针算法用于void指针(或者通常指向不完整类型的指针)。

对于第一部分:根据定义,sizeof(char) == 1,因此通过将指针转换为char指针,您获得的单位为1而不是sizeof(type)的单位 - 换句话说,您准确地获得了sizeof(type)的价值。