笔记——1

来源:互联网 发布:软件开发合同收费模式 编辑:程序博客网 时间:2024/06/12 01:04
-----------------------------------------
1.container_of(ptr, type, member)
(
    {
        const typeof (((struct i2c_adapter *)0)->dev) *__mptr = d; // typeof这个关键字还是第一次看到,搜索下发现,typeof就是将其包含的
对象的类型给提出来,针对此例,则表示将(((struct i2c_adapter *)0)->dev)的类型提出来,这个类型便是struct device类型,所以此行的作用是声明一个
(struct device *)类型的变量,同时给它赋值为d。结果语句为:struct device * __mptr = d;
(struct i2c_adapter *)((char *)__mptr - ((size_t) &((struct i2c_adapter *)0)->dev);
// 开始有一个强制转换类型,接着是一个运算,运算中首先是将__mptr强制转换成(char *)类型,即指向char的一个指针(地址)
// 接着是一个表达式,首先分析下((struct i2c_adapter *)0)->dev),此句表示将0地址强制转换成指向类型为struct i2c_adapter的指针(地址),然后得到该结构体中成员dev变量,最后加了一个&符号,表示取地址,就是dev相对于0地址的偏移地址。
// 最后又两个表达式之间进行减运算,这个运算就相当于将__mptr地址向前移动了"dev相对于0地址的偏移地址"那么多,实际操作也是这样。
    }
)
-------------------------------------------
2.大小端
大端:高地址存放低字节,低地址存放高字节。就类似将一个16进制的数按字符串的形式存放,例如0x1122,首地址指向的是0x11,即低地址指向了高字节。
小端:高地址存放高字节,低地址存放低字节。例如0x1122,首地址指向的是0x22,即低地址指向低字节。
-------------------------------------------
0 0
原创粉丝点击