sizeof的一个不常见用法
在linux内核中看到sizeof这样的用法不是很理解,请高手解释下。
struct spi_master*master;
master = kzalloc(size + sizeof *master, GFP_KERNEL);
其中函数kzalloc的参数类型是size_t 应该也是个整形之类的。
static inline void *kzalloc(size_t size, gfp_t flags)
{
return kmalloc(size, flags | __GFP_ZERO);
}
不理解的是sizeof*master得到的是什么东西,如何得到size_t的。
这是内核代码,肯定没错!
[解决办法]
sizeof *master<=>sizeof(struct spi_master)
[解决办法]
sizeof 是运算符,对 类型名操作一定要加(), sizeof(int)
对 变量名操作不一定要加(), int a; sizeof(a) == sizeof a;
[解决办法]
*master 解引用,括号可以不加
那么sizeof就是struct spi_master 这个类型的大小
[解决办法]
完全可以这样写,sizeof其实是个运算符,而不是函数, 所以也可以不加括号得到size_t
#include <stdio.h>
struct spi_master
{
int i;
double d;
};
int main(int argc, char* argv[])
{
struct spi_master *master;
size_t n_size1 = sizeof *master;
size_t n_size2 = sizeof master;
printf("n_size1 = %d\n", n_size1);
printf("n_size2 = %d\n", n_size2);
return 0;
}