sizeof-功能还是宏?

Kar*_*R.S 1 c sizeof

在c中,我们使用sizeof()for来获取数据类型的大小.那么它是如何定义的.它是一个宏或一个函数.

因为我们可以用两种方式,

sizeof int
Run Code Online (Sandbox Code Playgroud)

sizeof(int)
Run Code Online (Sandbox Code Playgroud)

这是如何在头文件中定义的.

unw*_*ind 6

它既不是.它是一个内置运算符,其值在编译时计算,除非参数是可变长度数组的名称(在C99中添加).

您经常看到的括号不是 "调用"的一部分,因为sizeof它不是函数.它们是参数的一部分,仅在参数是强制转换表达式时才需要,即括在括号中的类型的名称.

我个人建议使用sizeof与类型名作为参数只要有可能,因为它通常是不需要的,并创建一个断开/去耦这可能会导致错误.

考虑这样的事情:

float *vector = malloc(100 * sizeof(double));
Run Code Online (Sandbox Code Playgroud)

当然,上面包含一个错误:如果float小于double,则会浪费大量内存.很容易想象最终会出现类似上面的内容,如果vector从一个数组开始,double但后来改为float.为了保护这个,我总是写:

float *vector = malloc(10 * sizeof *vector);
Run Code Online (Sandbox Code Playgroud)

上面使用了参数*vector(类型的表达式float)sizeof,它不是类型名称,因此不需要括号.它还将元素的大小"锁定"到用于保持它的指针,这更安全.