#include<stdio.h>
#define MYSIZEOF(X) ((X*)0 +1)
int main()
{
printf("%ld", MYSIZEOF(int));
return 0;
}
任何人都可以解释一下它的工作原理吗? 提前谢谢
答案 0 :(得分:6)
这里的想法很简单:对T
类型指针的算术以sizeof(T)
的倍数执行,因此((X*)0 +1)
将 - 希望 - 成为指向地址的指针{ {1}}字节到内存中。
不幸的是,行为未定义为sizeof(X)
会创建一个NULL指针,并且编译器可能会在其编译的系统上替换一些非零值用作该哨兵。此外,代码假定(X*)0
是指针的正确格式,它可能不是。如果%ld
实现支持它,%p
将会有所改进。
当然,直接使用printf
运营商是愚蠢的....