欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

container_of和offsetof宏

在linux 驅動源碼中,有兩個很有意思的宏,分別是offsetof和container_of,他們的作用和定義是這樣子的

創(chuàng)新互聯(lián)建站是一家集網站建設,扎賚特企業(yè)網站建設,扎賚特品牌網站建設,網站定制,扎賚特網站建設報價,網絡營銷,網絡優(yōu)化,扎賚特網站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網站。

  1. offsetof 獲得結構體某成員相對于結構體的偏移長度

    /**
     *   計算的結構體中某成員的偏移量
     */
    #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)

    這個實現(xiàn)很巧妙,相當于設結構體的整體地址設成0,然后它的成員的地址就相當于成員的偏移

    測試代碼:

    #include <stdio.h>
    #include "list.h"
    
    typedef struct Test_struct
    {
            char ca;
            int ib;
            double dc;
    }Test_struct_t;
    
    int main()
    {
    
            printf("offset ca is %d\n",offsetof(Test_struct_t,ca));
            printf("offset ib is %d\n",offsetof(Test_struct_t,ib));
            printf("offset dc is %d\n",offsetof(Test_struct_t,dc));
    
            return 0;
    }

    執(zhí)行結果:
    offset ca is 0
    offset ib is 4
    offset dc is 8

2.container_of 是通過結構體的某成員的地址得到整個結構體的地址,在使用上進而可以訪問到結構體的其余成員

/**
 * container_of - cast a member of a structure out to the containing structure
 * @ptr:    the pointer to the member.
 * @type:   the type of the container struct this is embedded in.
 * @member: the name of the member within the struct.
 *  通過結構體中的某個成員的指針,反推出來結構體的指針,可以進而可以訪問其他成員
 */
#define container_of(ptr, type, member) ({          \
    const typeof( ((type *)0)->member ) *__mptr = (ptr);    \
    (type *)( (char *)__mptr - offsetof(type,member) );})

實現(xiàn)上實際就是當前這個成員的地址 減去 這個成員相對整個結構體的的偏移量,就是結構體的地址

測試代碼

typedef struct person
{
    char name[20];
    char phone_num[12];
    int index;
}Person_t;

void showInfo(Person_t *ptr)
{
    printf("name :%s\n",ptr->name);
    printf("phone_num :%s\n",ptr->phone_num);
    printf("index :%d\n",ptr->index);
}
// 通過姓名打印所以信息
void getInfoByName(char name[])
{
    if(!name)
        return ;
    Person_t *ptr = container_of(name,Person_t,name);
    if(ptr)
    {
        showInfo(ptr);
    }
}

int main()
{

    Person_t person;
    memset(&person,0x0,sizeof(Person_t));

    person.index = 110;
    strncpy(person.name,"zhangsan",strlen("zhangsan"));
    strncpy(person.phone_num,"15617274954",strlen("15617274954"));

   showInfo(&person);
   printf("\============\n");
   getInfoByName(&person.name);

    return 0;
}

執(zhí)行結果
name :zhangsan
phone_num :15617274954
index :110
\============
name :zhangsan
phone_num :15617274954
index :110

網頁題目:container_of和offsetof宏
本文地址:http://aaarwkj.com/article30/godgso.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供虛擬主機、定制開發(fā)Google、服務器托管、網站策劃、外貿建站

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

網站托管運營
久久精品国产亚洲av麻| 亚洲av日韩精品久久久| 国产大学生露脸在线视频| 黄色亚洲一区二区三区四区| 久久精品一区二区日韩| 亚洲欧美经典精品专区| 精品成人在线一区二区| 亚洲日本精品免费在线观看 | 国产情色自拍在线观看| 成人中文字幕日韩电影| 日韩精品诱惑一区二区| 国内成人免费在线视频| 少妇二区三区精品视频| 色综合色综合色综合色综合| 日韩成人在线视频观看| 国产成人三级视频网站| 熟妇人妻久久中文字幕麻豆网| 欧美一区二区三区高清正版| 国产精品夫妇在线激情啪| 国产超碰久久久久久精品| 亚洲精品成人福利网站| 亚洲国产成人综合一区二区三区| 国产精品推荐不卡一区| 一区二区亚洲欧美精品| 久久精品国产亚洲av清纯| 刘亦菲毛片一区二区三区| 国产亚洲精品热视频在线观看| 日本午夜专区一区二区| 国产三级全黄在线播放| 国产内射一级一片内射高清视频1 亚洲一区二区三区不卡伦理 | 亚洲另类综合日韩一区| 久久亚洲一区二区麻豆偷| 亚洲国产第一av导航| 97在线观看视频免费| 91麻豆视频福利视频| 国产免费成人午夜免费视频| 亚洲成av人亚洲av| 传媒视频在线观看网站| 日韩不卡在线免费播放| 日韩精品一区免费电影| 国产精品国产三级国产专用|