首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

sizeof的一个不常见用法,该如何处理

2013-07-09 
sizeof的一个不常见用法在linux内核中看到sizeof这样的用法不是很理解,请高手解释下。struct spi_master*ma

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;
}



http://hi.baidu.com/lijian_java/blog/item/6c2d43f56059c721bc3109d4.html

[解决办法]
这里的sizeof得到的就是struct spi_master 的长度,其实它和struct spi_master master;然后sizeof master是一样的。只不过它声明的是一个指针,所以用*master.
[解决办法]
sizeof是运算符而不是函数,它与+-*/没有什么区别, 所以用sizeof var的用法与sizeof(var)是一样的,好像用于sizeof(struct var)时括号不能省吧~~

热点排行