这是一个实现。
#include
#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不支持函数重载并且sizeof()应该接收所有数据类型的参数,因此无法在C中完成函数实现。
注意,以上实现假定字符的大小为一个字节。
时间复杂度: O(1)
空间复杂度: O(1)
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程” 。