C语言学习笔记(1)——输入输出,数据类型

一,编译原理

C语言编译分为四个步骤:预编译/预处理→编译→汇编→链接

1.预编译/预处理:对源代码进行初步文本处理,包括宏定义展开,文件的包含,注释删除,条件编译等 xxx.c-xxx.i
2.编译:检查语法错误,若没有错误就将其编译为汇编语言文件(汇编文件) xxx.i-xxx.s
3.汇编:将汇编文件转换为目标文件(二进制文件) xxx.s-xxx.o

4.链接:将一个或多个目标文件(.o)以及库文件合并成最终可执行的文件

二、输入输出函数

2.1 printf函数

函数原型:int printf( const char *format, ... );

函数功能:printf()函数根据format(格式)给出的格式打印输出到STDOUT(标准输出)和其它参数中

用法一:printf("字符串\n");

用法二:printf("字符串+格式控制符\n",输出参数);

用法三:printf("格式控制符1+格式字符串2\n",输出参数1,输出参数2);

宽度与精度控制:

1.宽度说明符控制实际的输出宽度

2.精度说明符控制实际的输出精度(小数点后几位)

3.%-f 或 %f:%号后面的正负决定输出是左对齐还是右对齐,整数表示宽度,小数部分表示精度

2.2 scanf函数

函数原型:int scanf( const char *format, ... );

函数功能:scanf()函数根据由format(格式)指定的格式从stdin(标准输入)读取,并保存数据到其它参数

用法一:scanf("字符串+格式控制符",地址表)

用法二:scanf("格式控制符1 格式控制符2",地址表1,地址表2);

注意:scanf函数双引号内除了格式控制符之外都要原样输入

%d格式控制符只能识别0-9,+ -(正负号),%d,%i,%f,%lf,%u,%o,%s,%x会跳过前导空白字符(包括空格、制表符、换行符)

注意:scanf 函数始终从输入缓冲区读取数据。如果缓冲区中有符合 format 格式的数据,就直接提取并赋给变量;如果缓冲区为空或数据不符合格式,会根据情况等待用户输入或立即返回失败。成功读取的数据会从缓冲区移除,失败时问题数据保留在缓冲区中。

2.3 getc与putc函数

函数原型:int getc(FILE *stream);

函数功能:从指定的文件流中读取一个字符
返回值:返回读取的字符(转换为 int 类型),如果到达文件末尾或发生错误,返回 EOF
函数原型:int putc(int char, FILE *stream);

函数功能:将一个字符写入指定的文件流

函数参数:参数 char 是要写入的字符(作为 int 传递)

返回值:返回写入的字符,如果发生错误返回 EOF

2.4 getchar与putchar函数

函数原型:int getchar(void);等价于 getc(stdin)

函数功能:从标准输入(stdin)读取一个字符

返回值:返回读取的字符(转换为 int 类型),如果到达文件末尾或发生错误,返回 EOF
函数原型:int putchar(int char);等价于 putc(char, stdout)

函数功能:将一个字符写入标准输出(stdout)

函数参数: char 是要写入的字符(作为 int 传递)

返回值:返回写入的字符,如果发生错误返回 EOF

2.5 fprintf与sprintf函数

函数原型:int fprintf(FILE *stream, const char *format, ...);

函数功能:将格式化数据写入指定的文件流
函数原型:int sprintf(char *str, const char *format, ...);

函数功能:不直接输出到屏幕或文件,而是存储到字符数组中

三、缓冲区

为什么引入缓冲区?

当高速设备与低速设备不匹配时,势必会让高速设备花时间等待低速设备,可以在这两者之间设立一个缓冲区。

作用一:可以解除两者的制约关系,数据可以直接送往缓冲区,高速设备不用再等待低速设备,提高了计算机的效率

作用二:可以减少数据的读写次数,如果每次数据只传输一点数据,就需要传送很多次,这样会浪费很多时间,因为开始读写与终止读写所需要的时间很长,如果将数据送往缓冲区,待缓冲区满后再进行传送会大大减少读写次数,这样就可以节省很多时间。

缓冲区刷新条件

1.缓冲区满:当缓冲区满时,会自动刷新

2.遇到换行符(对于行缓冲区):例如,标准输出(stdout)是行缓冲的,所以遇到'\n'时会刷新

3.手动刷新:使用fflush函数强制刷新缓冲区

4.程序正常结束:当main函数返回或调用exit时,所有打开的输出流会被刷新

5.关闭文件:当使用fclose关闭文件时,缓冲区会被刷新

6.从无缓冲流中读取:如果从无缓冲流中读取,则所有输出流会被刷新(这取决于实现)

7.从行缓冲流中读取:如果从行缓冲流中读取,则该流会被刷新(例如,从stdin读取时,会刷新stdout)
注意:标准错误流(stderr)通常是无缓冲的,这样错误信息可以立即显示

四、数据类型

4.1 关键字

①数据类型关键字:char short int float double long signed unsigned struct enum union void typedef volatile

基本数据类型:char short int long float double

派生类型:struct enum union

类型修饰符:signed unsigned

空修饰符:void

②控制语句关键字

选择结构:if-else switch-case-default

循环结构:for while do continue goto return break

③与存储类关键字

auto static extern const register

④运算符关键字

sizeof

作用:

auto:所有局部变量默认就是auto的

static:局部变量:保持值的持久性,只在第一次初始化

全局变量/函数:限制作用域为当前文件

extern:声明在其他文件中定义的全局变量或函数,用于多文件编程

const:定义只读变量,防止意外修改

register:建议编译器将变量存储在寄存器中(很少用)

volatile:告诉编译器变量可能被意外修改,防止编译器进行优化

变量名命名规则:①不能和关键字重名;②只能是数值,字母,下划线,美元符$;③第一个字符不能为数字

4.2 地址概述

CPU的位数主要决定了其通用寄存器的宽度,这直接影响CPU单次操作能处理的数据量和理论上能直接寻址的内存空间范围,但实际实现可能受地址总线宽度、操作系统和硬件架构的影响

4.3 大小端模式

4.4 存储原理

4.4.1 整形数据

整形数据是以补码的形式存储在内存当中

①如果数据为正数:原码 = 反码 = 补码

②如果数据为负数:反码 = 原码按位取反(除去符号位),补码 = 反码+1

4.4.2 浮点型数据

float:单精度浮点数(精确到小数点后6位)

double:双精度浮点数(精确到小数点后15位)

4.4.3 字符型数据

字符变量用来存储单个字符,在C语言中用char表示,其中每个字符占用一个字节。再给字符型变量赋值是,需要用一对英文半角格式的单引号('')将字符括起来

字符变量实际上并不是将字符本身放在变量的内存单元中,而是将字符对应ASCII编码放到变量的存储单元中。Char本质上就是一个字节大小的整形。

4.5 转义字符

|--------------------------------|---------------------|-------|
| 转义字符 | 含义 | ASCII |
| \a | 警报 | 7 |
| \b | 退格(BS),当前位置移到前一列 | 8 |
| \f | 换页(FF),将当前位置移到下页开头 | 12 |
| \n | 换行(LF),将当前位置移到下一行开头 | 10 |
| \r | 回车(CR),将当前位置移到本行开头 | 13 |
| \t | 水平制表符(HT),调到下一个tab | 9 |
| \v | 垂直制表符(VT) | 11 |
| \0 | 数字0 | 0 |
| \ + 1-3位八进制数字(0-7) | 8进制的转义字符(\123→S) | |
| \x + 1-n位十六进制数字(0-9,A-F,a-f) | 16进制转义字符(\41→A) | |

相关推荐
Zsy_0510031 小时前
【数据结构】二叉树介绍及C语言代码实现
c语言·数据结构·算法
土拨鼠烧电路1 小时前
RPA悖论迷思:从解放的利器到运维的枷锁?
大数据·运维·笔记·rpa
wubba lubba dub dub7501 小时前
第二十七周 学习周报
学习·算法·机器学习
IMPYLH1 小时前
Lua 的 select 函数
java·开发语言·笔记·后端·junit·游戏引擎·lua
云半S一1 小时前
春招准备之测试基础理论篇
经验分享·笔记·功能测试·测试覆盖率
摇滚侠1 小时前
2025最新 SpringCloud 教程,Nacos-注册中心-服务发现功能,笔记07
笔记·spring cloud·服务发现
GISer_Jing1 小时前
前端架构学习
前端·学习·架构
再睡一夏就好1 小时前
深入理解Linux程序加载:从ELF文件到进程地址空间的完整旅程
linux·运维·服务器·c++·学习·elf
我 see your eyes1 小时前
电力电子基础
学习