微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > C语言的博大精深之数组和结构体的赋值操作

C语言的博大精深之数组和结构体的赋值操作

时间:11-30 来源:互联网 点击:
第一话,先谈谈数组赋值吧。恩,在C语言中数组赋值和结构体赋值很简单,就是使用=,memcpy操作嘛.

但最近在看关于队列调度的内核实现代码时,发现如下奇怪的赋值语句。(具体程序见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语言在数组赋值时,可以专门对第几个元素进行赋值。此例中等于[2]={...},即对第二个元素赋值。

2, { .dumpit = rtnetlink_dump_ifinfo },说明,在结构体赋值中,也可以对某个特定的结构体成员进行单独的赋值。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top