黑马程序员———C语言———【枚举、typedef、宏、static和extern、文件操作】

本文详细讲解了C语言中的枚举类型、typedef关键字、宏定义以及static和extern修饰符的用法,并探讨了它们之间的区别。此外,还介绍了文件操作的基本步骤和常用函数,包括打开、关闭文件,以及字符、字符串、数据块的读写等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

——————————————————————————————————————————————————————————————————

一、枚举类型

1、概念:C语言提供了一种类型,这种类型的变量的取值被限定在一定的范围之内。

2、定义:enum  枚举类型名 { 枚举值1 , 枚举值2 , ... };

3、举例:

(1)定义一个变量,保存一周的第几天

enum  weekday{

         zhouyi , 

         zhouer , 

         zhousan , 

         zhousi , 

         zhouwu , 

         zhouliu , 

         zhouri 

};

(2)定义iPhone手机的颜色

关于枚举类型元素的命名习惯

enum  iColor{

kIcolorWhite , 

kIcolorBlack , 

kIcolorTHJ

};

(3)定义人的性别

enum  Sex{

         kSexMan , 

         kSexWoman , 

         kSexYao

};

weekday , iColor , Sex这些都是枚举类型

4、定义

(1)先定义枚举类型,再定义枚举变量

         enum  iColor  iPhoneColor ; 

         iPhoneColor的取值有范围的。

(2)定义枚举类型的同时,定义变量

         enum  Sex { kSexMan,kSexWoman ,kSexYao}  iSex;

5、赋值

         iPhoneColor  = kIcolorWhite ;

         iSex = kSexYao;

6、枚举变量的值:枚举类型定义完成以后,系统会自动给枚举的每个元素都会赋值一个整型的初值,默认初值:第一个从0开始,以后每个都+1

7、使用:

二、typedef关键字

1、作用:起别名

2、定义:typedef  原类型名  新类型名 ;

3、使用方法

(1)给基本数据类型起别名

(2)给数组起别名

(3)给结构体起别名

(4)给枚举类型起别名

(5)给函数指针起别名

、宏

0、typedef是起别名,宏就是替换

1、概念:C语言中我们自定义的特殊标识符,习惯大写

2、定义:#define  宏名  宏字符串(可以是常量,变量,表达式)

3、预处理指令:经常写在函数之前

4、宏替换:源程序在编译之前,由预处理程序对我们写的源代码进行处理:会把源代码中所有出现宏名的地方一律使用宏的字符串去替换。

5、书写规范:全部大写

6、使用:

7、宏可以嵌套使用

8、宏的分类

(1)有参宏

#define  SUM(a)  a+a

SUM(3) 不仅要a+a替换,而且还要把实参3带入到字符串中

(2)无参宏

#define  M  10

9、代码:使用有参宏实现判断两个数的大小

四、typedef和宏的区别

typedef   int*  T ;

#define   M   int*

T  a , b ;

M  a1 , b1 ;

a , b都是指针变量

a1是指针变量,b1是整型变量

五、# if  —  # else 条件编译指令


六、使用条件编译指令调试BUG


七、static和extern修饰关键字

1、static(内部变量)

(1)没加static的代码


(2)加static的代码


(3)static的作用

1)static定义的变量的作用于会得到延长

2)static定义变量的语句只会被执行一次

2、extern:extern是不能修饰局部变量的


3、extern和static的区别

(1)static对全局变量的作用

static修饰的全局变量,表示该全局变量只能在当前文件中使用,而不能在其他文件中使用。

可以在不同的文件中,申明同名的变量。

(2)extern对全局变量的作用

extern修饰的全局变量,表示当前变量可以在本文件中使用,也可以在其他文件中使用。

注意:extern声明的全局变量在不同的文件中不能同名(两个文件需要有包含关系)

—————————————————————————————————————————————————————————————————————————————

一、文件

1、文件操作步骤

(1)引入头文件(stdio.h)

(2)定义文件指针

(3)打开文件

(4)文件读写

(5)关闭文件

2、对于文件的读和写是最常用的文件操作,在C语言中提供了多种文件读写的函数:

(1)字符读写函数:fgetc()和fputc()

(2)字符串读写函数:fgets()和fputs()

(3)数据块读写函数:fread()和fwrite()

(4)格式化读写函数:fscanf()和fprintf()


二、  文件操作函数

1、fopen()

fopen函数用来打开一个文件,其调用的一般形式为:文件指针名=fopen(文件名,使用文件方式);

其中:

”文件指针名“必须是被说明为FILE类型的指针变量

”文件名“是被打开文件的文件名

”使用文件方式“是指文件的类型和操作要求

”文件名“是字符串常量或字符串数组

2、fclose()

文件一旦使用完毕,应用关闭文件函数把文件关闭,以避免文件的数据丢失等错误

使用方式:fclose(文件指针);

正常完成关闭文件操作时,fclose()函数返回值为0,如返回非零值则表示有错误发生。


注意:如果文件写操作时,没有进行关闭,可能会导致文件写入失败。


3、文件使用方式及注意事项:


4、字符读写函数:fgetc()和fputc()

字符读写函数时以字符(字节)为单位的读写函数,每次可从文件读出或向文件写入一个字符

fputc函数的功能是把一个字符写入指定的文件中,函数调用形式为:fputc(字符量,文件指针);


5、字符串读写函数:fgets()和fputs()


6、数据块读写函数:fread()和fwrite()

读取数据块函数的一般形式为:fread(buffer,size,count,,fp);

写数据块函数调用的一般形式为:fwrite(buffer,size,count,fp);

其中:

buffer:是一个指针,在函数中,它表示存放输入数据的首地址,如果是写,表示存

size:表示数据块的字节数

count:表示要读写的数据块的快数

fp:表示文件指针

如:

fread(fa,4,5,fp);

其意义就是从fp所指的文件中,每次读4个字节(一个实数)送入数组fa中,连续读5次,即读5个实数到数组中



7、格式化读写函数:fscanf()和fprintf()



8、文件定位

移动文件内部位置指针的函数主要有两个,即rewind()和fseek()

rewind函数前面已多次使用过,其调用形式为:rewind(文件指针)

它的功能是把文件内部的位置指针移到文件首。

下面主要介绍fseek函数,fseek函数用来移动文件内部位置指针,调用形式为:fseek(文件指针,位移量,起始点);

其中:

”文件指针“指向被移动的文件

”位移量“表示移动的字节数,要求位移量是Long型数据,以使在文件长度大于64kb时不会出错。

当用常量表示位移量时,要求加后缀L。

”起始点“表示从何处开始计算位移量,规定的起始点有3种,文件首,当前位置和文件尾。



9、文件判断函数feof()

调用格式:feof(文件指针);

功能:判断文件是否处于文件结束位置,如文件结束,则返回值1,否则为0


注意:feof函数总会多执行一次,也就是说会读取到字符串最后一个字符的下一个字符(是什么谁都不知道)。

所以,feof函数效果不是很好,最好采用EOF,文件结束不会再去多读取一次。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值