最近看了刘未鹏的《暗时间》,深感思考与写作的好处,于是打算开一个自己的博客,把学习生活中的点滴记录下来。正巧今年过年因为疫情原因回不了家,打算利用这个时间学一下C语言,并把自己的学习笔记和感悟记录在册。
我打算把这个专栏做成学习交流的平台,记录自己阶段学习的结果,既供自己以后查阅、整理,也方便与大家相互交流讨论。学习笔记的记录形式是我个人习惯的分点记录方式,且仅记录我个人认为值得记录的知识点,并非全部。前期可能有点琐碎,不过每个阶段我会进行一次总结,将这些分散的点串联成有逻辑的一条条线。
本文的主题是C语言的基本数据类型。
-
除main()主函数之外的其他函数,一般要出现3次:
- 第一次是函数原型(prototype)/ 声明(declaration);
- 第二次是函数定义(definition);
- 第三次是函数调用(call)。
在32位机器上,不同整数的取值范围
数据类型 | 位数 | 范围(注:short ≤ int ≤ long ≤ long long) |
---|---|---|
short | 16 | (约正负3万之间) |
int | 32 | (约正负21亿之间) |
long | 32 | (约正负21亿之间) |
long long | 64 | (约正负900亿亿之间) |
unsigned short | 16 | (约6万) |
unsigned int | 32 | (约42亿) |
unsigned long | 32 | (约42亿) |
unsigned long long | 64 | (约1800亿亿) |
- 占位符的含义
占位符 | 含义 |
---|---|
%d | 以十进制形式读写整数 |
%u | 以无符号十进制形式读写整数 |
%hd | 以十进制形式读写短整数 |
%ld | 以十进制形式读写长整数 |
%o | 以八进制形式读写整数 |
%x | 以十六进制形式读写整数 |
%c | 读写单个字符 |
%f | 以十进制记数法读写float类型浮点数,读double类型浮点数 (注:写入double类型浮点数必须用%lf) |
%e | 以指数记数法读写float类型浮点数,读double类型浮点数 (注:写入double类型浮点数必须用%le) |
%lf | 以十进制记数法读写long double类型浮点数 |
%le | 以指数记数法读写long double类型浮点数 |
-
数据溢出:分为上溢(overflow)和下溢(underflow)两种。当超过最大(小)数时,结果又从最小(大)数开始重新计算。
- 无符号型整数运算过程中发生溢出,会将结果对取模;
- 有符号型整数运算过程中发生溢出,结果不确定,属于未定义行为,包括:结果出错(最常见)、程序报错、崩溃等。
字符:用单引号括起来的单个字符
就浮点数的精度而言,float < double ≤ long double。
在Dev-C++中,float类型的有效位数是7,double类型的有效位数是16。
-
浮点数的上溢(overflow)和下溢(underflow)
- 上溢:变成无穷大;
- 下溢:损失精度(有效位数)。
sizeof()是C语言的内置运算符,以字节为单位给出指定类型的大小。C99和C11标准提供%zd转换说明匹配sizeof()的返回类型,一些不支持C99和C11标准的编译器可用%u或%lu代替。
把一个类型的数值初始化给不同类型的变量时,编译器会把值转换成与变量匹配的类型,这将导致部分数据丢失。
-
printf()何时输出?引入 缓冲区(buffer) 的概念
- 缓冲区满;
- 遇到换行字符时;
- 需要输入时。
下一章的主题是字符串和输入输出。