|||
有如下一个数据结构,是怎么定义出来的?
LOCALM const nlocalm[3] ={
/* Ethernet: Local IP address */
#if ETH_ENABLE == 1
{
{ _IP1, _IP2, _IP3, _IP4 },
/* Default Gateway IP address */
{ _GW1, _GW2, _GW3, _GW4 },
/* Subnet IP Mask */
{ _MSK1, _MSK2, _MSK3, _MSK4 },
/* Primary DNS Server IP */
{ _pDNS1, _pDNS2, _pDNS3, _pDNS4 },
/* Secondary DNS Server IP */
{ _sDNS1, _sDNS2, _sDNS3, _sDNS4 }
},
#else
{
{ 0,0,0,0 },
{ 0,0,0,0 },
{ 0,0,0,0 },
{ 0,0,0,0 },
{ 0,0,0,0 }
},
#endif
/* PPP: Local IP address */
#if PPP_ENABLE == 1
{
{ _IP1P, _IP2P, _IP3P, _IP4P },
/* Default Gateway IP address */
{ 0, 0, 0, 0 },
/* Subnet IP Mask */
{ _MSK1P, _MSK2P, _MSK3P, _MSK4P },
/* Primary DNS Server IP */
{ _pDNS1P, _pDNS2P, _pDNS3P, _pDNS4P },
/* Secondary DNS Server IP */
{ _sDNS1P, _sDNS2P, _sDNS3P, _sDNS4P }
},
#else
{
{ 0,0,0,0 },
{ 0,0,0,0 },
{ 0,0,0,0 },
{ 0,0,0,0 },
{ 0,0,0,0 }
},
#endif
/* SLIP: Local IP address */
#if SLIP_ENABLE == 1
{
{ _IP1S, _IP2S, _IP3S, _IP4S },
/* Default Gateway IP address */
{ 0, 0, 0, 0 },
/* Subnet IP Mask */
{ _MSK1S, _MSK2S, _MSK3S, _MSK4S },
/* Primary DNS Server IP */
{ _pDNS1S, _pDNS2S, _pDNS3S, _pDNS4S },
/* Secondary DNS Server IP */
{ _sDNS1S, _sDNS2S, _sDNS3S, _sDNS4S }
}
#else
{
{ 0,0,0,0 },
{ 0,0,0,0 },
{ 0,0,0,0 },
{ 0,0,0,0 },
{ 0,0,0,0 }
},
#endif
};
有上述定义可以看出 LOCALM是一个数据类型,问题关键是这个数据类型是怎么定的?
nlocalm[3]是有三个元素的数组,每个元素又是一个5行4列的二维数组。
所以LOCALM应该定义如下:
#define U8 unsigned char
typedef U8 LOCALM[5][4];
稍微简单的用法如下:
tpyedef int ARR[10];
ARR a;
若如上定义,则说明a为含有10个整型数据的数组。
再简单的用法如下:
typedef int COUNT
COUNT i,j;
其含义显而易见了,不再赘述。
另外可以用typedef 声明结构体类型,如:
typedef struct
{
int month;
int day;
int year;
}DATA;
DATA birthday; (不要写成struct DATA birthday)。