<分区>
在 c 中,我们使用 sizeof()
来获取数据类型的大小。所以
它是如何定义的。它是一个宏或一个函数。
因为我们可以用两种方式,
sizeof int
和
sizeof(int)
那么这是如何在头文件中定义的。
<分区>
在 c 中,我们使用 sizeof()
来获取数据类型的大小。所以
它是如何定义的。它是一个宏或一个函数。
因为我们可以用两种方式,
sizeof int
和
sizeof(int)
那么这是如何在头文件中定义的。
最佳答案
两者都不是。它是一个内置运算符,其值是在编译时计算的,除非参数是可变长度数组的名称(在 C99 中添加)。
您经常看到的括号不是“调用”的一部分,因为sizeof
不是函数。它们是参数的一部分,并且只有当参数是强制转换表达式时才需要,即括在圆括号中的类型的名称。
我个人建议反对尽可能使用带有类型名称的sizeof
作为参数,因为它通常不需要,并且会创建一个断开连接/解耦,这可能会导致错误。
考虑这样的事情:
float *vector = malloc(100 * sizeof(double));
当然,上面有一个bug:如果float
小于double
,会浪费很多内存。如果 vector
最初是 double
的数组但后来更改为 float
,很容易想象得到类似上面的结果。为了防止这种情况,我总是这样写:
float *vector = malloc(10 * sizeof *vector);
上面使用参数*vector
(float
类型的表达式)到sizeof
,不是 类型名称,因此不需要括号。它还将元素的大小“锁定”到用于保存它的指针,这样更安全。
关于c - sizeof-函数还是宏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28363064/