我们sizeof
中有C
运算符。它返回数据类型的大小,
printf("%d",sizeof(some datatype));
,结果为4(取决于操作系统)。
我想知道它是如何计算的。这个运营商背后的逻辑是什么?
如果我要求您为sizeof
运算符编写代码。你的答案是什么?
注意:我想知道sizeof
如何编写为代码,以便能够计算大小。
我可能无法正确地提出我的问题,我在这里再试一次。
Write one function which we can use instead of sizeof operator.
答案 0 :(得分:5)
编译器知道所有类型的大小,它必须或者无法正确生成代码。此信息由sizeof
运营商使用。
另请注意,sizeof
不是在运行时调用的某个函数,它是在编译期间完全评估的运算符。
答案 1 :(得分:1)
在编译时,sizeof(int)
被替换为特定于平台的常量。sizeof
运算符完全在C编译器中实现。它不是一个函数调用,它不能在运行时运行。
编译器中sizeof的代码非常简单。它具有硬编码值,例如,在32位机器int
上有4个字节,char
有1个字节等等。所以,它只是一个简单的查找和替换字符串{{1与sizeof(int)
。
顺便说一下,你在一元表达式上不需要括号,所以只有4
才能写int t[10]
。但是,您需要它们作为类型名称表达式,例如:sizeof t
。只是一个有趣的事情。
答案 2 :(得分:1)
引自wikipedia:
在大多数情况下,sizeof是编译时运算符,这意味着在编译期间,sizeof表达式被替换为常量结果值。
答案 3 :(得分:0)
在编译时sizeof(int)
被适当的大小取代,取决于操作系统(16位,32位,64位)
您可以为字符串编写自己的函数大小
或MACRO
#define SIZEOF(x) ((char*)(&(x) + 1) - (char*)&(x))