您的位置:首页 > 理论基础 > 数据结构算法

Info系统 中 数据结构的一点总结

2013-08-25 14:08 330 查看
1 配置数据时,sex采用了枚举类型进行定义

typedef enum tagINFO_SEX
{
INFO_SEX_FEMALE = 1,
INFO_SEX_MALE   = 2

}INFO_SEX_E;

typedef struct tagINFO_CFG
{
unsigned int uiId;
unsigned int uiAge;
INFO_SEX_E   enSex;
char szName[INFO_NAME_MAXLEN+1];
}INFO_CFG_S;

2 定义链表节点时,注意重定义后的结构名不要使用在本结构体中,不然我们会遇到很大的麻烦,我们来看下面的一个例子

#include<stdio.h>
#include<stdlib.h>

typedef struct tagData
{
unsigned int uiId;
unsigned int uiAge;
}DATA_S;

typedef struct tagInfo_Cfg
{
struct INFO_CFG_S *pstNext;
DATA_S stData;
}INFO_CFG_S;

int main()
{
INFO_CFG_S *pst1 = (INFO_CFG_S *)malloc(sizeof(INFO_CFG_S));
INFO_CFG_S *pst2 = (INFO_CFG_S *)malloc(sizeof(INFO_CFG_S));
INFO_CFG_S *pst3 = (INFO_CFG_S *)malloc(sizeof(INFO_CFG_S)); //在这里为了说明,我不做pst返回值判断了

pst1->pstNext = pst2;
pst2->pstNext = pst3;
pst3->pstNext = NULL;

pst1->pstNext->stData.uiId =1;

return 0;

}会报如下警告和错误,指针类型不完整!



在这里,我们可以使用强制转换来解决

((INFO_CFG_S *)(pst1->pstNext)->stData).uiId =1;
但这个并不能彻底解决问题,因为在pclint时发出的一种警告是无法消除的
解决方案为

typedef struct tagInfo_Cfg
{
struct tagInfo_Cfg *pstNext;   //这一行发生了变化
DATA_S stData;
}INFO_CFG_S;
3 定义宏时,时刻谨记加括号!

4 定义枚举类型时候的一种 技巧

#include<stdio.h>

typedef enum tagInfo_Menu
{
INFO_MENU_UNSPEC,    //用来判断合法性
INFO_MENU_ADD,
INFO_MENU_DELETE,
INFO_MENU_MAX      //用来判断合法性
}INFO_MENU_E;

#define INFO_MENU_ISVALID(enNum) ((INFO_MENU_UNSPEC<(enNum))&&((enNum)<INFO_MENU_MAX))

int main()
{
INFO_MENU_E enN1 = 0;
INFO_MENU_E enN2 = 1;
INFO_MENU_E enN3 = 2;
INFO_MENU_E enN4 = 4;
INFO_MENU_E enN5 = 5;
printf("enN1 = %d,enN2 = %d,enN3 = %d,enN4 = %d,enN5 = %d\r\n",
INFO_MENU_ISVALID(enN1),INFO_MENU_ISVALID(enN2),
INFO_MENU_ISVALID(enN3),INFO_MENU_ISVALID(enN4),
INFO_MENU_ISVALID(enN5));
return 0;
}

输出为
enN1 = 0,enN2 = 1,enN3 = 1,enN4 = 0,enN5 = 0

5 数组赋值

#include<stdio.h>
#include<stdlib.h>

int main()
{
int a[] = {[1]=3,[2]=4,[5]=8};
int i;
printf("arr size = %d\n",sizeof(a));
for(i=0;i<sizeof(a)/sizeof(int);i++)
{
printf("a[%d]=%-3d",i,a[i]);
}
printf("\n");
return 0;
}

输出结果如下
arr size = 24

a[0]=0  a[1]=3  a[2]=4  a[3]=0  a[4]=0  a[5]=8 

这种用法常见于和枚举类型混合使用,在解析命令时用到的比较多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C