程序设计C语言(4)

文章详细介绍了C语言中结构体的定义、变量初始化、数组和指针的使用,以及位字段的概念和限制。同时,讨论了联合体(union)的特点和作用,枚举类型的定义与初始化。此外,还涵盖了typedef的作用和与#define的区别。最后,文章讲解了文件操作的基本概念,包括二进制和文本文件、存取方式以及相关函数的使用。
摘要由CSDN通过智能技术生成

结构类型

  • 引入: 离散——>相同数据类型的数组——>数据类型各不相同的结构体
  • 结构的定义:结构的定义描述了组织形式,没有分配内存空间
struct 结构名
{
	数据类型 成员名1;
	数据类型 成员名2......
	数据类型 成员名n;
};
可以嵌套定义
  • 结构变量的定义:<存储类型>
  • struct 结构名 结构变量名; 分配内存空间
  • 结构变量的使用形式:
    • 结构变量名.成员名
    • 不能将结构作为整体参加数据处理,而是对各个成员项数据进行操作和运算。
  • 结构变量的初始化:
    • struct student wang ={“wang wu”,20190101,‘F’,85,80}; 顺序、个数、数据类型对应相同
  • 结构数组
    • <存储类型> struct 结构名 结构数组名[元素个数] [={初值表}];相同结构体变量的数组
    • 初始化:struct student man[] ={
      {“王伟”,20,‘八区231’,423201},
      {“张强”,23,’三区102‘,423210}
      };
    • 访问方式:man[0] , man[0].age
  • 结构指针
    • <存储类型> struct 结构名 *结构指针名 [=初始地址]
    • struct student *ptr =man[0];
    • 访问方式
      • 成员访问符 ’ . ':(*结构指针名).成员名 (*man).name 注意: “.” 的优先级高,所以“ *man ”要括起来
      • 指针运算符 ‘->’ :结构指针名->成员名 man->name
  • 结构体变量在函数间传递
    • 4种方法:①结构体变量的成员作参数②结构体变量作参数③结构变量地址作参数④返回值传递结构体
  • 复杂结构体的设计:研究底层对象的属性、逐层向上整合、逐层嵌套结构体

位字段

  • 应用:过程控制、参数检测、数据通信

  • 意义:压缩存储,减少占用的宝贵空间,嵌入式程序设计

  • 限制:严格依赖于机器硬件,可移植性相对较差

  • 定义:以二进制位为单位的字段组成的数据;一个字节中按位划分不同的区域,即位段

  • 位字段结构:类型 [成员名]:位数;

    在这里插入图片描述
    在这里插入图片描述
    注意:①无名位字段指定长度:依次占用同一个字中的对应位数
    ②无名位字段指定长度为0:依次占用同一个字中的同一字节下的剩余所有位数,其后一个成员从下一字节开始存放
    ③一个位段必须存储在同一存储单元下(按字划分即为同一个字中)
    ④可以单独对成员项作运算,但是不能作 &取地址运算
    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述

  • 访问方式:成员访问 ‘ .’ 、指针访问’->

联合union

  • 定义:不同数据类型的数据使用相同的存储区域,这种数据结构类型称为联合体
  • 理解:union中的每个成员都从union的首地址开始存放,任意时刻只有一个成员真正的占用了内存,成员间相互排斥所以和结构体的唯一区别:内存是否共用
    在这里插入图片描述
  • union的大小:与最大的成员项大小相等,如:position[10]
  • union的使用:使用union中的成员时,数据类型必须对应当前时刻的数据类型,定义什么类型的成员,则只能输出该类型的成员。(编译通过,但结果错误)
  • 作用:中断寄存器值提取、大小端判断、键值提取

    在这里插入图片描述在这里插入图片描述

枚举

  • 枚举类型:限定了取值范围的整形类型,属于基本数据类型
  • 构造类型:数组、结构体、位字段、联合
  • 定义: enum 枚举类型名 {枚举元素1,枚举元素2,…,枚举元素n};
    enum color {black,blue,red,green,white}; enum color col; col = red;
  • 初始化:隐式、显式; 显式申明时,后一个元素从前一个下标开始 在这里插入图片描述
  • 输出:枚举元素等价于整数。如果按%d输出元素,则输出0~len-1的编号
  • 作用域:局部枚举则在函数内部使用;全局枚举则在整个程序中使用。
  • 注意:枚举常量使用大写字母标识,枚举常量不能重新赋值。

类型定义语句

  • 引入:对已定义的数据类型赋予别名,使用别名来定义变量
  • 定义: typedef <类型说明> <新别名1,新别名2…>;typedef int INTEGER; INTEGER a,b;
  • 好处:
    • 简化书写量tepedef struct tagComplex{double real; double imag;}COMPLEX; COMPLEX c1,c2;
    • 突显变量的实际意义tepedef int LENGTH, WIDTH; LENGTH x; WIDTH y;
    • 可移植性在这里插入图片描述
  • typedef 与 #define 的区别
    • #define 属于预处理语句,在程序编译前将所有INTEGER 替换为 int ,形成新的代码
    • typedef 属于编译时,不是简单字符串替换,可以将数组类型、函数指针定义为新别名在这里插入图片描述

链表

  • 特点:可动态分配的数据结构
  • 组成:头指针、节点
  • 基本操作:链表建立、节点插入、节点删除、链表删除

文件

  • 概念
    • 数据流:C语言将文件看作顺序字节流,每个文件用文件结束符EOF结束
    • 缓冲区:在程序执行时,所提供的额外内存,暂存数据提高效率
    • 文件类型:二进制文件、文本文件
      • 二进制文件:占用空间小、速度快、数据保存不会丢失有效位
      • 文本文件:占用空间大、速度慢、便于对字符进行操作
    • 存取方式:顺序存取、随机存取
      • 顺序存取:按照文件的逻辑地址顺序进行存取,常用于文本文件
      • 随机存取:用户以任意次序请求某个记录,在请求时给出起始存取地址,常用于二进制文件
    • 文件类型指针 FILE <stdio.h>
      在这里插入图片描述
  • 基本操作:打开、定位、读写、关闭

    在这里插入图片描述
    打开: fopen ( )
    在这里插入图片描述关闭:fclose ()
    在这里插入图片描述
    数据块读写函数:fread () 、fwrite ()
    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述
    格式化读写函数:fscanf ( ) 、fprintf ( ),在这里插入图片描述在这里插入图片描述
    字符读写函数:fgetc () 和 fputc ()
    在这里插入图片描述在这里插入图片描述在这里插入图片描述
    字符串读写函数 fgets () 和 fputs ()
    在这里插入图片描述
    在这里插入图片描述
    定位: rewind () 和 fseek ()
    rewind: void rewind(FILE *fp) 重置文件位置指针到文件开头
    fseek: int fseek(FILE *fp,long offset,int whence)
    ①改变文件位置指针的位置,成功返回0,失败返回-1
    ②offset表示移动的字节数,要求为long型保证文件长度>64KB时不会出错,如果offset为常量,则初始化时后面加’L’,如:long offset = 123L;
    ③whence表示从文件的什么位置开始计算位移量在这里插入图片描述

  • BMP位图文件
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值