结构体按下标来访问
昨天在项目中遇到这样一个问题:需要把结构体中的成员一一取出发送。
我想一个一个取出来太死板,就想着能不能用下标的方法去解决。先是问了几个朋友,他们也没有这么做过。于是google。在http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=3221128&bbs_page_no=1&search_mode=3&search_text=yulutong&bbs_id=9999的网友lxyppc提出了这样一种处理方法:
代码
1 #define u8_t 1
2 #define u16_t 2
3 #define u32_t 3
4 #define float_t 4
5 typedef struct{
6 u8 t; // 类型说明
7 union{
8 u8 u8Var;
9 u16 u16Var;
10 u32 u32Var;
11 float fVar;
12 }un;
13 }my_t;
14
15 struct{
16 my_t d1;
17 my_t d2;
18 my_t d3;
19 my_t d4;
20 }sum = {{u8_t},{u16_t},{u32_t},{float_t}};
21
22 void InitMy_t(my_t* p)
23 {
24 switch(p->t){
25 case u8_t:
26 p->un.u8Var = 0x12; break;
27 case u16_t:
28 p->un.u16Var = 0x1234; break;
29 case u32_t:
30 p->un.u32Var = 0x12345678; break;
31 case float_t:
32 p->un.fVar = 12.3456; break;
33 default:
34 break;
35 }
36 }
37
38 for(my_t * p = &sum.d1; p<=&sum.d4; p++){
39 InitMy_t(p);
40 }
41
我大概看了下,这样处理还是很巧妙的。但是我的结构体中成员不是很多,所以也就没有采用下标访问。不过也许将来会用到这种方法。先保存着吧.

浙公网安备 33010602011771号