关于union里边的数组成员和其他成员长度不一样的问题
前一段看一个新的系统里边有这么几个定义和用法://定义内容
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定义时给开辟了长度,但也不能这样用为定义到得数组啊……