【c语言问题系列教程之二】结构、联合和枚举
2016-09-25 22:13
316 查看
一、结构声明
1.两种结构声明的类型
①
也可以同时使用这两种方法
2.c语言中不能结构标签自动生成类型定义名,结构是这样中关键字声明的
在.cpp文件中如果用 x thestruct;这样的语句声明结构体是可以通过编译的
3.位域的声明
有时候存储一个变量并不需要一个字节,比如一个开关变量只需要一位即可,有时候也为了管理方便,所以出现了域的概念。域的声明方法个结构体类似,可以用下面的方法:
①一个位域必须存储在同一个字节中,不能跨两个字节。
②对于不用的位,可以用无名域来填充,无名域即把标识符去掉,只剩下":"和数字。
二、联合
1.联合本质是一个成员相重叠的结构,联合的大小是它的最大成员的大小(也会有对齐和边界原则)。
这部分内容就这么多了,我们下期在会~~
1.两种结构声明的类型
①
struct x1{...};此方法声明了一个结构标签,使用该声明的结构标签时必须是
struct x1 a;②
typedef struct {...} x2;此方法声明他它的实例时不须要再使用struct关键字,相当于声明了一种类型x2。
也可以同时使用这两种方法
typedef struct x3{...} x3;
2.c语言中不能结构标签自动生成类型定义名,结构是这样中关键字声明的
struct x{....}; struct x thestruct;在.c文件中如果用x thestruct;这样的语句声明结构体
#include<stdio.h> struct x{ char a; int i; }; int main() { x c; system("pause"); return 0; }报错如下
在.cpp文件中如果用 x thestruct;这样的语句声明结构体是可以通过编译的
#include<iostream> using namespace std; struct x{ char a; int i; }; int main() { x c; system("pause"); return 0; }程序输出结果如下
3.位域的声明
有时候存储一个变量并不需要一个字节,比如一个开关变量只需要一位即可,有时候也为了管理方便,所以出现了域的概念。域的声明方法个结构体类似,可以用下面的方法:
struct bs { int a:8; int b:2; int c:6; }data;此时表示a占8bit,b占2bit,c占6bit。
①一个位域必须存储在同一个字节中,不能跨两个字节。
②对于不用的位,可以用无名域来填充,无名域即把标识符去掉,只剩下":"和数字。
struct k { int a:1 int :2 /*该2位不能使用*/ int b:3 int c:2 };位域所占空间也是有对齐和边界原则的(可以参考c语言中结构体空间大小的确定),比如:
#include<stdio.h> struct x{ int a:2; int b:4; }; int main() { int l=sizeof(struct x); printf("%d\n",l); system("pause"); return 0; }输出结果为
二、联合
1.联合本质是一个成员相重叠的结构,联合的大小是它的最大成员的大小(也会有对齐和边界原则)。
这部分内容就这么多了,我们下期在会~~
相关文章推荐
- 如何组织构建多文件 C 语言程序(二)
- 如何写好 C main 函数
- Lua和C语言的交互详解
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解
- 浅谈C语言转义字符和格式控制符
- C语言内存对齐实例详解
- C语言编程中统计输入的行数以及单词个数的方法
- C 语言简单加减乘除运算
- C语言自动生成enum值和名字映射代码
- C语言练习题:自由落体的小球简单实例
- 使用C语言判断英文字符大小写的方法
- c语言实现的带通配符匹配算法
- C语言实现顺序表基本操作汇总
- C语言中进制知识汇总
- C语言判断一个数是否是2的幂次方或4的幂次方
- C语言二进制思想以及数据的存储