-6

这里我们有sizeof运算符 in C。它返回数据类型的大小,

printf("%d",sizeof(some datatype));

结果为 4(取决于操作系统)。

我想知道它是如何计算的。该运算符背后的逻辑是什么。如果我要求您为sizeof操作员编写代码。你的答案是什么?

注意:我想知道如何sizeof编写为代码,以便能够计算大小。

可能我无法正确提出我的问题,我在这里再次尝试。

Write one function which we can use instead of sizeof operator.

4

4 回答 4

5

编译器知道所有类型的大小,它必须知道否则无法正确生成代码。该信息由sizeof操作员使用。

另请注意,sizeof不是在运行时调用某些函数,而是在编译期间完全评估的运算符。

于 2013-07-25T12:11:58.707 回答
1

在编译时,sizeof(int)被替换为常数,特定于某个平台。sizeof运算符完全在 C 编译器中实现。这不是函数调用,它不在运行时工作。

编译器中 sizeof 的代码非常简单。它具有硬编码的值,例如,在 32 位机器int上有 4 个字节,char有 1 个字节等。所以,它只是一个简单的查找和替换sizeof(int)字符串4

顺便说一句,你不需要在一元表达式上加上括号,所以int t[10]你可以只写sizeof t. 但是,您将需要它们作为类型名称表达式,例如:sizeof(int). 只是一件有趣的事情。

于 2013-07-25T12:13:37.947 回答
1

引用维基百科

在大多数情况下, sizeof 是一个编译时运算符,这意味着在编译期间 sizeof 表达式会被常量 result-values 替换

于 2013-07-25T12:18:53.607 回答
0

在编译时sizeof(int)替换为取决于操作系统的适当大小(16 位、32 位、64 位)

您可以为字符串编写自己的函数大小

或宏

#define SIZEOF(x) ((char*)(&(x) + 1) - (char*)&(x))
于 2013-07-25T12:16:07.343 回答