在某些特殊时候,我们会想如果结构体也能向数组一样通过下标操作符进行操作的话,代码将直接通过循环语句就能实现,尤其当我们的数据来源于数据库获得的数据集时,这种用法还是比较有意思的。
结构体的下标操作这里只做技术上研究,实际开发中非常不提倡这么用。原因是这种结构体当成员很多时结构体占用内存将会非常大(结构体SIZE=MAX(成员SIZE)*成员数),而当结构体成员很少时完全没有必要用下标操作符。这种结构体的下标操作符在实际开发应用中,几乎是没有可用价值的。
要实现结构体的下标操作符,我们需要了解,我们所设定的结构体的成员大小必须有规律,那我们直接假设各成员的内存大小是相等的,就比较简单了。怎么样才能使结构体的成员内存大小都一样,而且我们还要使结构体支持不同类型的成员?这时就可以想到共同体union了,共同体的好处是各成员共享内存。
按这个思路,我们首先将我们需要的类似通过共同体自定义一种新的统一类型:
typedef union __un_MY_VAR
{
BYTE buf[1024];
TCHAR cBuf[512];
int iRs;
float fRs;
double dfRs;
__un_MY_VAR()
{
clear();
}
void clear()
{
memset(buf,0,1024);
}
} MYVAR;
以上我定义了一个新类型MYVAR,支持字符串、整形和浮点型。然后我们就可以用该新类型进行结构体的定义了:
typedef