1. 主页
  2. 文档
  3. C语言教程
  4. C语言案例实战
  5. C语言实现你自己的 sizeof

C语言实现你自己的 sizeof

这是一个实现。

#include<stdio.h>
#define my_sizeof(type) (char *)(&type+1)-(char*)(&type)
int main()
{
double x;
printf("%ld", my_sizeof(x));
getchar();
return 0;
}

类型就像宏的局部变量。&type 给出程序中声明的变量 (double x) 的地址,并将其加 1 给出可以存储类型 x 的下一个变量的地址(此处为 addr_of(x) + 8,因为 double 的大小为 8B )。
差异给出的结果是,有多少 x 类型的变量可以存储在该内存量中,对于 x 类型显然为 1(将其递增 1 并取差是我们所做的)。将其类型转换为 char* 并获取差异将告诉我们在给定的内存空间中可以存储多少 char 类型的变量(差异)。由于每个字符只需要 1B 的内存,因此 (内存量)/1 将给出传递给宏的变量类型的两个连续内存位置之间的字节数,从而给出变量的内存量类型 x 需要。
但是您将无法将任何文字传递给该宏并知道它们的大小。

您也可以使用函数而不是宏来实现,但函数实现不能在 C 中完成,因为 C 不支持函数重载,并且 sizeof() 应该接收所有数据类型的参数。

请注意,上面的实现假设字符的大小是一个字节。

时间复杂度: O(1)
空间复杂度: O(1)

这篇文章对您有用吗?