本文共 652 字,大约阅读时间需要 2 分钟。
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)计算。
转载地址:https://blog.csdn.net/weixin_33045961/article/details/117128394 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!