新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > C語言的博大精深之數(shù)組和結(jié)構(gòu)體的賦值操作

        C語言的博大精深之數(shù)組和結(jié)構(gòu)體的賦值操作

        作者: 時間:2016-11-30 來源:網(wǎng)絡(luò) 收藏
        第一話,先談?wù)?strong>數(shù)組賦值吧。恩,在C語言中數(shù)組賦值和結(jié)構(gòu)體賦值很簡單,就是使用=,memcpy操作嘛.
        但最近在看關(guān)于隊列調(diào)度的內(nèi)核實現(xiàn)代碼時,發(fā)現(xiàn)如下奇怪的賦值語句。(具體程序見linux-2.6.8:net/core/Rtnetlink.c的539行)
        1. #defineRTM_MAX(RTM_BASE+47)
        2. #defineRTM_GETLINK(RTM_BASE+2)

        3. structrtnetlink_link
        4. {
        5. int(*doit)(structsk_buff*,structnlmsghdr*,void*attr);
        6. int(*dumpit)(structsk_buff*,structnetlink_callback*cb);
        7. };

        8. staticstructrtnetlink_link link_rtnetlink_table[RTM_MAX-RTM_BASE+1]=
        9. //RTM_MAX-RTM_BASE+1=48

        10. {
        11. [RTM_GETLINK-RTM_BASE]={.dumpit=rtnetlink_dump_ifinfo},
        12. [RTM_SETLINK-RTM_BASE]={.doit=do_setlink},
        13. [RTM_GETADDR-RTM_BASE]={.dumpit=rtnetlink_dump_all},
        14. [RTM_GETROUTE-RTM_BASE]={.dumpit=rtnetlink_dump_all},
        15. [RTM_NEWNEIGH-RTM_BASE]={.doit=neigh_add},
        16. [RTM_DELNEIGH-RTM_BASE]={.doit=neigh_delete},
        17. [RTM_GETNEIGH-RTM_BASE]={.dumpit=neigh_dump_info}
        18. };
        上面這段賦值語句第一次見到。看了N久后,我才明白這個賦值語句的含義,原來C語言還可以這樣賦值哦
        說明:上面這段賦值語句有兩個需要注意的地方。
        1,[RTM_GETLINK - RTM_BASE] = { .dumpit = rtnetlink_dump_ifinfo }, 這條說明C語言在數(shù)組賦值時,可以專門對第幾個元素進行賦值。此例中等于[2]={...},即對第二個元素賦值。
        2, { .dumpit = rtnetlink_dump_ifinfo },說明,在結(jié)構(gòu)體賦值中,也可以對某個特定的結(jié)構(gòu)體成員進行單獨的賦值。


        評論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 博野县| 忻州市| 新乡县| 万盛区| 祁门县| 吴川市| 眉山市| 沿河| 张家川| 江阴市| 颍上县| 福鼎市| 德格县| 开江县| 烟台市| 达拉特旗| 辉南县| 恭城| 十堰市| 呼和浩特市| 德安县| 渭南市| 宁国市| 叶城县| 嘉善县| 呼图壁县| 湟源县| 明光市| 镇远县| 阿图什市| 蓬莱市| 昂仁县| 左云县| 镇平县| 攀枝花市| 西畴县| 宝鸡市| 江达县| 罗平县| 美姑县| 苍山县|