sizeof不是函数,而是运算符,C/C++语言编译器在预编译阶段的时候就已经处理完了sizeof的问题,也就是说sizeof类似于宏定义。
下面给出一个sizeof的一个宏定义实现版本
#define sizeof(L_Value) ((char*)(&L_Value + 1) - (char*)(&L_Value))
实验一:
#define mysizeof(L_Value) ((char*)(&L_Value + 1) - (char*)(&L_Value))
int main(){
int a[5]={1,2,3,4,5};
printf("%d",mysizeof(a));
char c=getchar();
return 0;
}输出:20
不过本文的mysizeof只能对已定义的变量求大小
实验二:
#define mysizeof(L_Value) ((char*)(&L_Value + 1) - (char*)(&L_Value))
int main(){
int a[5]={1,2,3,4,5};
printf("%d",mysizeof(&a));
char c=getchar();
return 0;
}此时会报语法错误,因为&a并不是我们定义的变量,详细说是&a不是左值,用宏替换后变为((char*)(&&a + 1) - (char*)(&&a)),&&a有语法错误。我们的版本还是不够强大啊,不知道C语言设计中是怎么实现的sizeof(&a)计算。
本文探讨了C/C++语言中的sizeof运算符,解释了它的工作原理,并通过宏定义的方式模拟了其基本行为。实验部分展示了如何使用自定义的宏来获取变量的大小。
1279

被折叠的 条评论
为什么被折叠?



