八、结构体
1.结构体的概念
定义
结构体可以理解为自定义的数据类型,由一批数据组合而成的结构型数据
格式
struct结构定义的大括号后有分号“ ;”
使用
书写位置
函数的里面:局部的位置,只能在本函数中使用
函数的外面:全局的位置,在所有的函数中都可以使用
2.结构体数组
①定义变量并赋值数据
②将变量放到数组中
③遍历数组得到元素
3.起别名
细节
1.起了别名后可以省略正式名
2.使用时不用再写struct
4.结构体作为函数参数
情况
1.传递结构体中的数据值
2.传递结构体的地址值
注意:如果函数中写的是结构体类型的变量,相当于是定义了一个新的变量,要想改变结构体中变 量的值就要利用指针
5.结构体嵌套
细节
①结构体2需要利用结构体1时,需要把结构体1定义在结构体2上
②利用结构体1时,需要在结构体1内定义变量,写入结构体2的应是结构体1的变量
③嵌套结构体内的变量在赋值和打印时需要缀上结构体1、结构体2的结构名
6.内存对齐
变量位置
①变量只能放在自己类型整数倍的内存地址上
②结构体的总大小,是最大类型的整数倍
③对齐时会补白字节,但不会改变原本字节的大小补位
eg. double→8字节
九.共同体/联合体
1.共同体的概念
核心
一种数据可能有多种类型
格式
利用
①对于union中不同类型的变量分别赋值
②每次只能赋一个值
③共同体也可起别名,规则与结构体相同
特点
①所有的变量都使用同一个内存空间
②所占的内存大小=最大单个成员的长度(也受内存对齐的影响,总大小一定时最大单个成员的整 数倍)
③每次只能给一个变量赋值是因为第二次赋值时会覆盖原有的数据
2.结构体与共同体的区别
1.性质
结构体:一种事物中包含多种属性
共同体:一个属性有多种类型
2.存储方式
结构体:各存各的
共同体:存在一起,多次存会覆盖
3.内存占用
结构体:各个变量的总和(受内存对齐的影响
共同体:最大类型(受内存对齐影响)
十.动态内存分布
1.常用函数
头文件为stdlib.h
①malloc函数申请一片连续的空间
eg. 申请一片空间,储存100个int类型的整数
返回这片空间的首地址
int *p=malloc(100,sizeof( int ) );
printf("%d\n",p);
②free函数释放空间
eg.如果申请的空间不需要再进行使用了,记得一定要释放
free(p);
③realloc函数扩容
eg.原申请空间不够用,扩容空间
int*pp= realloc(p, 20* sizeof( int ));
2.动态内存分配的细节
3.c语言的内存结构
• 只有指针加双引号的字符数组才可以放在常量区,不可复用,再次赋值会在常量区创建新常量
• 常量不可修改,但变量的地址可修改
• 只要内存都大,堆可以放下无数数据
十一.文件
程序———→文件:输出流读
文件———→程序:输入流读
1.路径
文件在电脑上的位置
2.表达方式
路径都是以字符串的形式来进行表示的
相对路径以当前项目为参照物
\ :转义字符,改变\后字符的原本含义
如果要打印一个路径的话,记得写两个\\
eg.打印一个普通的双引号
printf(" \" ") ;
3.读取数据
把本地文件中的数据读到程序中来
步骤
①打开文件 fopen
②读数据
fgetc:一次读一个字符,如果读到了,就返回读取到的字符,读不到返回-1
fgets :一次读一行,读不到返回NULL
fread:一次读多个
③关闭文件 fclose
文件读写模式
4.写出数据
把程序中的数据写到本地文件中永久保存
步骤
①打开文件 fopen
②写数据
fputc:一次写一个字符,返回写出的字符
fputs:一次写一个字符串,写出成功返回非数,一般忽略返回值
fwrite:一次读多个,返回写出的个数
③关闭文件 fclose