新聞中心

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

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

作者: 時(shí)間:2016-11-30 來源:網(wǎng)絡(luò) 收藏
第一話,先談?wù)?strong>數(shù)組賦值吧。恩,在C語言中數(shù)組賦值和結(jié)構(gòu)體賦值很簡單,就是使用=,memcpy操作嘛.
但最近在看關(guān)于隊(duì)列調(diào)度的內(nèi)核實(shí)現(xiàn)代碼時(shí),發(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. };
上面這段賦值語句第一次見到??戳薔久后,我才明白這個(gè)賦值語句的含義,原來C語言還可以這樣賦值哦
說明:上面這段賦值語句有兩個(gè)需要注意的地方。
1,[RTM_GETLINK - RTM_BASE] = { .dumpit = rtnetlink_dump_ifinfo }, 這條說明C語言在數(shù)組賦值時(shí),可以專門對(duì)第幾個(gè)元素進(jìn)行賦值。此例中等于[2]={...},即對(duì)第二個(gè)元素賦值。
2, { .dumpit = rtnetlink_dump_ifinfo },說明,在結(jié)構(gòu)體賦值中,也可以對(duì)某個(gè)特定的結(jié)構(gòu)體成員進(jìn)行單獨(dú)的賦值。


評(píng)論


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

關(guān)閉