【发布时间】:2012-03-11 04:45:42
【问题描述】:
我正在写以下大小的宏,我想知道它们的区别。
#define my_sizeof(type) (char*)(&type+1)-(char*)(&type)
#define my_sizeof(type) (void*)(&type+1)-(void*)(&type)
第一个问题是为什么需要类型转换,我知道如果我不进行类型转换,它总是返回 1,我通过运行它来检查它。我想知道意义(我的意思是它告诉编译器做什么)。
第二,
char* 和 void* 有什么区别?
非常感谢。
【问题讨论】:
-
形式宏参数
type命名错误。应该是Var,因为如果您使用my_sizeof(int),宏将不起作用 -
你读过一本关于 C 编程的好书吗?指针算法对类型化元素进行运算!
-
您不能在标准 C 中减去两个
void*指针。但gcc接受它作为扩展! -
你能指点我一个很好的链接,告诉我指针算术运算符.....
标签: string pointers compiler-construction casting void-pointers