Info系统 中 数据结构的一点总结
2013-08-25 14:08
330 查看
1 配置数据时,sex采用了枚举类型进行定义
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
这种用法常见于和枚举类型混合使用,在解析命令时用到的比较多
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
这种用法常见于和枚举类型混合使用,在解析命令时用到的比较多
相关文章推荐
- 数据结构-哈希表的一点小总结
- 对于Unity中旋转问题的一点总结
- 数据结构回顾和总结(树的各种遍历方法)(2)
- 数据结构—期末总结
- 黑马程序员---Java基础总结---数据结构、运算符
- 关于download项目的一点总结
- 写代码,分析问题的一点总结
- 关于工作的一点总结和思考
- 看完linux课本第五章后的一点总结,顺便做个报告。
- EventBus 3.0使用步骤(一):(每天学一点,总结一下适合自己的)
- 数据结构小总结
- 数据结构中的各种排序---总结篇
- iOS app支付宝接口调用的一点总结(补充支付宝SDK&Demo下载地址)
- Knockout: radio选项切换引发click事件的一点总结
- sizeof的一点总结
- 关于JavaWeb拦截访问一点总结。
- hadoop 框架中知识的一点总结
- 简单的数据结构(总结)只涉及用数组或链表实现
- 数据结构-各类排序算法总结
- HTTP协议 HttpWebRequest和 Socket的一点总结