复合数据类型
2016-07-25 10:18
225 查看
复合数据类型
**
作用:封装数据(多种不同类型数据存放在一起)
应存放在全局,在访问结构体中的变量时,应用stu.id; stu.name{};
初始化的方式:
在对数组进行初始化时:
在对指针进行初始化时:char *name; 对name进行初始化:
整体初始化:
结构体数组
第一种初始化方式
第二种初始化方式
输出方式
*使用注意事项
字对齐 :含有4个字节,按照4个字节对齐
半字对齐:至多含有2个字节,按照两个字节对齐
其中重要的是
占8个字节
占4个字节
所以在定义结构体时,相同类型的放在一起,节省空间,防止内存空洞
**
结果是4,共用体用的是同一段空间,测量的是共用体中最长成员的长度。
存在数据覆盖的问题。
用于杜绝幻数,提高代码的可读性,需要大量整数宏时,用枚举
**
1.struct结构体
**作用:封装数据(多种不同类型数据存放在一起)
应存放在全局,在访问结构体中的变量时,应用stu.id; stu.name{};
初始化的方式:
在对数组进行初始化时:
strcpy(stu.name, "zhangsan");
在对指针进行初始化时:char *name; 对name进行初始化:
stu.name = (char *)mollac(sizeof((char)*100);
整体初始化:
struct student stu = { .age = 17; .name = "zhangsan"; .id = 3};
结构体数组
第一种初始化方式
struct student stu_array[3] = {{1,"zhangsan",17}; {2,"lisi",18}; {3,"wangwu",19} };
第二种初始化方式
for(i = 0; i < 3; i++) { scanf("%d", &(stu_array[i].id)); scanf("%s", stu_array[i].name): scanf("%d", &(stu_array[i].age)); }
输出方式
for(i = 0; i < 3; i++) { printf("%d", &(stu_array[i].id)); printf("%s", stu_array[i].name); printf("%d", &(stu_array[i].age)); }
*使用注意事项
字对齐 :含有4个字节,按照4个字节对齐
半字对齐:至多含有2个字节,按照两个字节对齐
其中重要的是
char short char
占8个字节
char char short
占4个字节
所以在定义结构体时,相同类型的放在一起,节省空间,防止内存空洞
**
2.union
**unoin node { int num; char ch; } union node p; union node *pp = &p; p.num = 1; p.ch = 'a'; pp->ch = 'a';
printf("sizeof(p)=%d\n", sizeof(p));
结果是4,共用体用的是同一段空间,测量的是共用体中最长成员的长度。
存在数据覆盖的问题。
3.枚举
enum node { A, B, C, D, E, };
用于杜绝幻数,提高代码的可读性,需要大量整数宏时,用枚举
相关文章推荐
- 如何组织构建多文件 C 语言程序(二)
- 如何写好 C main 函数
- Lua和C语言的交互详解
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解
- C语言编程中统计输入的行数以及单词个数的方法
- C 语言简单加减乘除运算
- C语言自动生成enum值和名字映射代码
- C语言练习题:自由落体的小球简单实例
- 使用C语言判断英文字符大小写的方法
- c语言实现的带通配符匹配算法
- C语言实现顺序表基本操作汇总
- C语言中进制知识汇总
- C语言判断一个数是否是2的幂次方或4的幂次方
- C语言二进制思想以及数据的存储
- C语言中计算正弦的相关函数总结