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

来源:互联网 发布:php磁力解析源码 编辑:程序博客网 时间:2024/04/23 19:55

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 
这种用法常见于和枚举类型混合使用,在解析命令时用到的比较多










原创粉丝点击