sizeof运算符宏#define MYSIZEOF(X)((X *)0 +1)

时间:2015-09-03 06:49:53

标签: c++ c

#include<stdio.h>
#define MYSIZEOF(X) ((X*)0 +1)
int main()
{
    printf("%ld", MYSIZEOF(int));
    return 0;
}

任何人都可以解释一下它的工作原理吗? 提前谢谢

1 个答案:

答案 0 :(得分:6)

这里的想法很简单:对T类型指针的算术以sizeof(T)的倍数执行,因此((X*)0 +1)将 - 希望 - 成为指向地址的指针{ {1}}字节到内存中。

不幸的是,行为未定义为sizeof(X)会创建一个NULL指针,并且编译器可能会在其编译的系统上替换一些非零值用作该哨兵。此外,代码假定(X*)0是指针的正确格式,它可能不是。如果%ld实现支持它,%p将会有所改进。

当然,直接使用printf运营商是愚蠢的....