关于union里边的数组成员和其他成员长度不一样的问题

作者在 2009-08-27 10:38:40 发布以下内容
前一段看一个新的系统里边有这么几个定义和用法:
//定义内容
typedef struct canaplform{
 uchar IntLevel :1;
 uchar    :7;
 uchar PLength[2];        //僨乕僞挿   [0]=L/[1]=H
 uchar PData[1];        //[1]可变长
} CAN_APLFORM;
 
typedef union{
 uchar all[sizeof(CAN_APLFORM)+16];
 CAN_APLFORM apl;
} UCANAPLALL16;
 
//应用以上定义
UCANAPLALL16 ctmp;

   ctmp.apl.PLength[0] = a;
   ctmp.apl.PLength[1] = b;
   ctmp.apl.PData[0]  = CANSRC_OFF;
   ctmp.apl.PData[1]  = CANSRCBANK_FF;
   ctmp.apl.PData[2]  = CANSRCADD_0;
 
问题:
C语言中规定对数组的定义时长度是不可变的,也就是定义[10],即数组长度为10,初始化时只能用[0]到[9]……
而此处用法为何定义[1],却可以用到[0][1][2]甚至更长到[15]。虽然知道union定义时给开辟了长度,但也不能这样用为定义到得数组啊……
 
问题 | 阅读 1050 次
文章评论,共0条
游客请输入验证码
文章分类
文章归档
最新评论