c语言学习笔记之结构体,枚举
来源:互联网 发布:linux cp 文件夹覆盖 编辑:程序博客网 时间:2024/05/18 19:21
什么是结构体?
答:若干个相同或者不同类型的数据组成的新的类型
如何定义结构体
struct 结构体名{
成员列表; 格式: 类型 变量名;
};
//-----------------结构体变量
结构体变量特点:
一个复合类型,具备结构体的特性
struct stu{
int age;
}stu1,stu2;
//匿名结构体
struct{
int model;
}s1; //
//先定义结构体,后定义变量
struct stu stu3;
//------------------结构体变量中成员的访问方法
结构变量名.成员名
点语法
boy1.num boy1的学号
boy2.sex boy2的性别
boy1.birthday.month boy1的生日的月份
//-------------------如何初始化结构体变量
初始化的时候,注意成员的顺序
//先定义结构体变量,后初始化
struct stu{
int age;
char name[20]; //字符串数组
// char *name2; //字符串指针
}stu1;
stu1.age =10;
stu1.name = "xxx" ; //错误的
strcpy(stu1.name,"xxx"); //正确的 通过strcpy方法
stu1.name2 = "xxx" //正确
struct stu1 = {18,"xxx"};
//定义同时进行初始化 严格遵守定义顺序
1)全部输初始化
struct stu{
int age;
char name[20];
}stu1={23,"sss"};
2)部分初始化
struct stu boy1={.name="weige"};
//---------------------结构体存储空间
结构体在内存中占用的存储空间是 所有元素占用空间之和(考虑对齐)
1.逐个元素对齐(下个元素与之前所有元素之和对齐)
2.整体对齐(最后的和能单独整除所有元素)--> 最后能整除最长类型
//-------------------结构体作用域
全局 Person
{
局部 Person
Person
} 局部的被释放了
Person
1、结构体的数组
定义:由相同类型的结构体变量组成的有序的集合。
定义格式:
1) 定义结构体的同时定义结构体数组
struct Car{
int lunzi;
int speed;
}cars[5];
2) 使用匿名结构体定义数组
struct {
int lunzi;
int speed;
}cars[5];
3)先定义结构体,再定义结构体数组
struct Car cars[5];
初始化:
1) 定义结构体数组的同时进行初始化
struct Car{
int lunzi;
int speed;
char name[20];
}cars[2]={{2,50},{80,300}};
2) 匿名
struct {
int lunzi;
int speed;
int speed;
}cars[2]={{2,50},{80,300}};
3)
struct Car cars[2]={{2,50},{80,300}};
4)先定义数组,后初始化
cars[0].lunzi = 4;
cars[0].speed = 200;
//cars[0].name="xxxx"; 错误的
strcpy(cars[0].name,"xxxx"); const char a;
通过数组角标整体去初始化 cars[1]=(struct Car){6,100};
2、结构体指针
定义:指向结构体的指针
格式:结构体类型 * 结构体指针变量名;
struct Student stu1;
struct Studetn *pstu;
pstu = &stu1;
作用:可以间接访问结构体变量中保存的成员变量值
(*pstu).name
(*pstu).sno 新的访问方法
pstu->name // 只有结构体指针变量才可以
等价于 (*pstu).name
3、结构体与函数之间的关系
1)结构体变量作为函数的参数 (值传递)
2)结构体指针作为函数的参数 (地址传递)
4、枚举类型
使用场合:在开发中,如果一个变量只有有限的几个取值,可以使用枚举
1)枚举类型
enum 枚举类型名{枚举值1,值2,值3,...};
2)枚举类型的变量
enum SEX{man,women,yao}isex;
enum {man,women,yao}s1;
enum SEX s2;
3)枚举类型变量的使用
1)枚举元素的值
系统默认给枚举变量第一元素赋值为0,后面的元素依次是上一个元素+1
2)给枚举类型变量赋值
isex = man;
printf("%d\n",isex);
5、typedef定义类型
定义:给已经存在的数据类型取一个别名
格式:typedef 原类型 新类型名; //新类型名尽量要大写
5.1、基本数据类型
typedef int MALATANG; 别名: MALATANG
5.2、用在数组,给数组起别名
typedef int ARRAY[5]; 别名: ARRAY
5.3、给结构体其别名
typedef struct Person P; 别名: P
typedef struct { int screenSize; int ram;} IPHONE; 别名: IPHONE
5.4、给枚举类型起别名
typedef enum Sex{kSexMan,kSexWomen,kSexYao} ISEX; 别名: ISEX
5.5. 给函数指针起别名
typedef int (*FUN)(int,int); 别名:FUN
6、预处理指令的概念
定义:以“#” 开头的一些特殊的指令
作用:
在编译之前做些处理(宏展开,条件编译,文件包含)
常见的预处理指令: 宏
宏:特殊的标示符
宏替换 :在编译之前,在源文件中,所有出现宏名的地方 都用宏代表的字符串 去替换
注意:宏不是语句,不需要分号结束
1)无参宏
#define 宏名 宏代表的字符串
#define M 10
#define AREA 3.14*M*M
#define PI 3.14
2)有参宏
#define Mi(y) y*y+3*y // y 是形参,不分配空间,不需要写类型
#define MAX(a,b) a>b?a:b
#define SUM(a,b) a+b
7、条件编译
当条件满足的时候去编译一段代码
好处:可移植、生成更小的目标文件
格式:
#if
#elif
#else
#endif
- c语言学习笔记之结构体,枚举
- c语言学习笔记之结构体和枚举
- C语言学习笔记-结构体、共用体、枚举
- 【C语言学习笔记】结构体、枚举、预处理指令
- C语言学习笔记10-结构体、枚举、联合体
- C语言之结构体学习笔记
- C语言基础之结构体、枚举
- 程序设计与C语言学习笔记_第八章结构体、公用体、枚举
- iOS开发学习笔记 2-8 C语言部分 联合 枚举 结构体
- 黑马程序员——ios学习笔记 C语言 结构体&链表&枚举
- 黑马程序员——C语言笔记之结构体以及枚举
- C语言学习笔记 之 结构体指针变量
- 黑马程序员----C 语言学习笔记之结构体
- c语言学习笔记44之结构体
- C语言(结构体、枚举、typedef)笔记 by STP
- 黑马程序员——C语言学习之结构体和枚举
- 黑马程序员_C语言学习笔记之结构体和枚举
- 【黑马程序员】C语言学习笔记之枚举(十三)
- 导入excel数据
- Scala之旅-集合操作
- spring+hibernate多数据源切换のSessionFactory切换
- HTML学习记录<三> :创建电子邮件链接
- SVG(可缩放矢量图形)
- c语言学习笔记之结构体,枚举
- ubuntu下Android studio布局文件无法可视化问题-Could not initialize class com.android.layoutlib.bridge.impl.Render
- 轮廓线动态规划问题
- 2015弱校联盟(1) - C. Censor
- JavaScript动画性能优化
- Hadoop学习笔记(四)Hadoop伪分布式配置
- C++的零指针(NULL,0,nullptr)
- 排序算法
- c语言学习笔记之文件操作