C语言入门第六章知识点总结

C语⾔⼊门第六章知识点总结
传智播客C/C++课堂笔记C语⾔⼊门6
6.1如何节约内存-位运算
内存单元,即1B,我们说char型占1个内存单元(1B),⽽short型占2个内存单元(2B)。1B被当成整体来看。但同时1 B = 8 bits1个字节有8个位,每个位有0、1两个取值。
总体来说,C语⾔中的位运算符有以下两类:
位逻辑运算符:(位逻辑运算以位(bit)为单位)
&(位“与”)、^(位“异或”)、|(位“或”)、~(位“取反”)。
移位运算符:<<(左移)、>>(右移)
位“取反”:操作符为“~”,如果A为10101010,那么~A返回的结果为01010101,即每位都取反,0变成1,1变成0,需要注意的是,位取反运算并不改变操作数的值位“与”:操作符为&,将对两个操作数的每⼀位进⾏与运算,位“与”运算的准则如下:1 & 1=1 1 & 0=0 0 & 1=0 0 & 0=0
位“或”:操作符为|,将对两个操作数的每⼀位进⾏或运算,位“或”运算的准则如下:1 | 1=1 1 | 0=1 0 | 1=1 0 | 0=0
位“异或”:操作符为^,将对两个操作数的每⼀位进⾏异或运算。通俗地讲,如果两个位相同(同为0或同为1),结果为0,若两个位不同(⼀个为0,另⼀个为1),结果为1,对应的准则为:1 ^ 1=0 1 ^ 0=1 0 ^ 1=1 0 ^ 0=0
移位运算表达式的基本形式为:
A << n; /*左移*/
A >> n; /*右移*/
A称为操作数,其必须为数字型变量或数字型常量,此处的数字型包括整型、浮点型和char型,A中存储的0、1序列向左或右移动n位,移动后的值作为整个表达式的输出,执⾏移位运算并不改变操作数A的值。
⼩结:
位运算主要分为位逻辑运算和移位运算两⼤类,位逻辑运算主要有位取反运算、位或运算、位与运算和位异或运算,使⽤时应注意和普通变量的逻辑运算区分。移位运算分为向左移动和向右移动两类,对⽆符号数或有符号正数来说,编译器会⾃动为空⽩位补0,对有符号负数来说,当填充的空⽩位牵扯到符号位时,编译器会对符号位进⾏特殊处理。
6.2不局限内存-⽂件
输⼊输出都是由printf函数和scanf函数来完成,完成的也只是极其简单的任务,所有的变量和数字什么的都是放在内存中,⼀旦断电,所有的数据都会丢失,有时,希望能将结果保存起来,下次开机时再使⽤,这就要⽤到⽂件。
⽂件:存储在外部介质上数据的集合,是操作系统数据管理的单位。
⽂件分类
按⽂件的逻辑结构:
记录⽂件:由具有⼀定结构的记录组成(定长和不定长)
流式⽂件:由⼀个个字符(字节)数据顺序组成
按存储介质:
普通⽂件:存储介质⽂件(磁盘、磁带等)
设备⽂件:⾮存储介质(键盘、显⽰器、打印机等)
按数据的组织形式:
⽂本⽂件:ASCII⽂件,每个字节存放⼀个字符的ASCII码
⼆进制⽂件:数据按其在内存中的存储形式原样存放
6.2.1 ⼆进制⽂件和⽂本⽂件的区别
6.2.2 ⽂件标识
每个⽂件都以⽂件名为标识,I/O设备的⽂件名是系统定义的,如:
COM1或AUX——第⼀串⾏⼝,附加设备
COM2——第⼆串⾏⼝,此外,还可能有COM3、COM4等
CON——控制台(console),键盘(输⼊⽤)或显⽰器(输出⽤)
LPT1或PRN——第⼀并⾏⼝或打印机伯克
LPT2——第⼆并⾏⼝,还可能有LPT3等
NUL——空设备
磁盘⽂件可以由⽤户⾃⼰命名,但上述被系统(windows和dos下均是如此)保留的设备名字不能⽤作⽂件名,如不能把⼀个⽂件命名为CON(不带扩展名)或CON.TXT(不带扩展名)6.2.3流
流是⼀个动态的概念,可以将⼀个字节形象地⽐喻成⼀滴⽔,字节在设备、⽂件和程序之间的传输就是流,类似于⽔在管道中的传输,可以看出,流是对输⼊输出源的⼀种抽象,也是对传输信息的⼀种
抽象。通过对输⼊输出源的抽象,屏蔽了设备之间的差异,使程序员能以⼀种通⽤的⽅式进⾏存储操作,通过对传输信息的抽象,使得所有信息都转化为字节流的形式传输,信息解读的过程与传输过程分离。
C语⾔中,I/O操作可以简单地看作是从程序移进或移出字节,这种搬运的过程便称为流(stream)。程序只需要关⼼是否正确地输出了字节数据,以及是否正确地输⼊了要读取字节数据,特定I/O设备的细节对程序员是隐藏的。
6.2.4⽂件的处理⽅法
缓冲⽂件系统:⾼级⽂件系统,系统⾃动为正在使⽤的⽂件开辟内存缓冲区
⾮缓冲⽂件系统:低级⽂件系统,由⽤户在程序中为每个⽂件设定缓冲区
6.2.5重定向
重定向是由操作系统来完成的,⼀般来说,标准的输出和输⼊设备通常指的是显⽰器和键盘,在⽀持重定向的操作系统中,标准输⼊输出能被替换。
DOS系统为例,看⼀段代码:
#include /*使⽤printf要包含的头⽂件*/
void main(void) /*主函数*/
{
printf("本段⽂字⽤来测试重定向"); /*输出提⽰信息*/
getchar(); /*等待,按任意键继续*/
}
< <;输⼊,>输出
6.2.6⽂件类型指针
指针变量说明:FILE *fp;
扶绥中学⽤法:
⽂件打开时,系统⾃动建⽴⽂件结构体,并把指向它的指针返回来,程序通过这个指针获得⽂件信息,访问⽂件
⽂件关闭后,它的⽂件结构体被释放
6.2.7⽂件型结构体
使⽤printf函数时,输出设备默认为标准输出设备(⼀般是显⽰器),因此,不需要告诉printf 函数显⽰器在哪。门罗宣言
但如果想从⽂件中读取输⼊,情况就不同了,系统中有不同的磁盘,每个磁盘⼜有成千上万的⽂件,到底应该从哪个读呢?要想对⽂件进⾏操作,系统需要很多控制信息,包括⽂件名,⽂件当前读写位置,缓冲区位置和⼤⼩等,为此,C语⾔提供了“⽂件型”结构来标⽰记录待操作⽂件的信息,该结构定义于头⽂件stdio.h中,其形式为:
struct _iobuf
{
char *_ptr;//当前缓冲区内容指针
int _cnt;//缓冲区还有多少个字符
char *_base;//缓冲区的起始地址
int _flag;//⽂件流的状态,是否错误或者结束
int _file;//⽂件描述符
int _charbuf;//双字节缓冲,缓冲2个字节
int _bufsiz;//缓冲区⼤⼩
char *_tmpfname;//临时⽂件名
};
typede f struct _iobuf FILE;
6.2.8⽂件操作步骤
C语⾔程序在进⾏⽂件操作时遵循如下操作步骤:打开读写操作关闭,通俗地说,打开是
打开⽂件
函数原型:FILE *fopen(char *name,char *mode)
功能:按指定⽅式打开⽂件
返值:正常打开,为指向⽂件结构体的指针;打开失败,为NULL
关闭⽂件
作⽤:使⽂件指针变量与⽂件“脱钩”,释放⽂件结构体和⽂件指针
函数原型:int fclose(FILE *fp)
功能:关闭fp指向的⽂件
返值:正常关闭为0;出错时,⾮0
不关闭⽂件可能丢失数据
6.2.10字符读写函数fgetc和fputc
fgetc(fp) fp为⽂件句柄,函数值为得到的字符。
fputc(ch,fp) ch为字符变量,fp为句柄。成功函数返回相应字符;失败返回EOF。按照⽂本的⽅式读取字符,以及写⼊字符。
feof
函数原型:int feof(FILE *fp)
功能:判断⽂件是否结束
返值:⽂件结束,返回真(⾮0);⽂件未结束,返回0
函数原型:
char *fgets(char *s,int n,FILE *fp)
int fputs(char *s,FILE *fp)
王玉辉
(fputs把s指向的字符串写⼊fp指向的⽂件)
从fp指向的⽂件读/写⼀个字符串
返值:
●fgets正常时返回读取字符串的⾸地址;出错或⽂件尾,返回NULL
fputs正常时返回写⼊的最后⼀个字符;出错f
gets从fp所指⽂件读n-1个字符送⼊s指向的内存区,
并在最后加⼀个‘\0’
(若读⼊n-1个字符前遇换⾏符或⽂件尾(EOF)即结束) fputs把s指向的字符串写⼊fp指向的⽂件去离子水ph
6.2.11数据块I/O:fread与fwrite
数据块I/O:fread与fwrite
函数原型:
size_t fread(void *buffer,size_t size, size_t count,FILE *fp) size_t fwrite(void *buffer,size_t size, size_t count,FILE *fp)功能:读/写数据块
返值:成功,返回读/写的块数;出错或⽂件尾,返回0
说明:
typedef unsigned size_t;
金长城国际广告
buffer: 指向要输⼊/输出数据块的⾸地址的指针
size: 每个要读/写的数据块的⼤⼩(字节数)
count: 要读/写的数据块的个数
fp: 要读/写的⽂件指针
fread与fwrite ⼀般⽤于⼆进制⽂件的输⼊/输出
6.2.12格式化I/O:fprintf与fscanf
格式化I/O:fprintf与fscanf
函数原型:
int fprintf(FILE *fp,const char *format*,argument,…+)

本文发布于:2024-09-21 00:24:34,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/361359.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:数据   运算   字节   信息   函数   输出
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议