文章目录
- C Prinmer Plus笔记
- 第1章 初始C语言
- 第2章 C语言概述
- 第3章 数据和C
- 第4章 字符串和格式化输入/输出
- 4.1
- 4.2.1
- 4.2.3
- 4.3常量和C预处理器
- 4.4printf()和scanf()
- 第5章 运算符、表达式和语句
- 第6章 C控制语句:循环
C Prinmer Plus笔记
超简洁版 大一学过了现在大三上课被老师dissC语言基础不扎实
再加上看了大佬们写的游戏开发面试题 决定重新从头学一遍C语言
第1章 初始C语言
高效、可移植、强大而灵活、面向程序员
使用C语言的7个步骤:
1.定义程序的目标
2.设计程序
3.编写代码
4.编译
5.运行程序
6.测试和调试程序
7.维护和修改程序
链接器的作用:把编写的目标代码、系统的标准启动代码和库代码合并成一个文件,即可执行文件
第2章 C语言概述
组成C程序的几个部分
#include——预处理指令
int main()——main()总是第1个被调用的函数——语句——组成函数的语句
function a()——函数是C程序的构造块——语句
function b()——语句
C语言中的六种语句:标号、复合、表达式、选择、迭代、跳转语句
其中语句中包含:关键字、标识符、运算符、数据
ISO C关键字
auto extern short while break float signed _Alignas
case for sizeof _Alignof char goto static _Atomic
const if struct _Bool continue inline switch _Complex
default int typedef _Generic do long union _Imaginary
double register unsigned _Noretrun else restrict void _Static_assert
enum return volatile _Thread_local1
第3章 数据和C
char 字母和其他字符 也可以表示较小的整数
float\double\long double 表示带小数点的数 _Bool表示布尔值 _Complex和_Imaginary表示复数和虚数
计算机的储存方式分为两大基本类型:整数类型和浮点数类型
位、字节和字
最小的存储单元是位(bit),可以储存0或1
字节(byte)是常用的计算机存储单位 1字节为8位
字(word)是设计计算机时给定的自然存储单位 计算机的字长越大,其数据转移越快,允许的内存访问也更多 目前64位
3.16E7表示3.16乘以10的7次方
7是整数 7.00是浮点数 浮点数和整数存储方案不同 计算机把浮点数分成小数部分和指数部分来表示,分开存储
实际区别:整数没有小数部分,浮点数有小数部分;浮点数可以表示的范围比整数大;对于一些算术运算,浮点数损失的精度更多;因为在任何区间内都存在无穷多个实数,所以计算机的浮点数不能表示区间内所有的值。浮点数通常只是实际值的近似值;浮点数运算慢
0x或0X前缀表示十六进制值 0前缀表示八进制 16、0x10、020
以十进制显示数字使用%d;以八进制显示数字用%o;以十六进制显示数字使用%x
另外要显示各进制数的前缀必须分别使用%#o、%#x、%#X
char是整数类型 ASCII码的范围是0~127 占一个字节
转义序列 | 含义 |
---|---|
\a | 警报(ANSI C) |
\b | 退格 |
\f | 换页 |
\n | 换行 |
\r | 回车 |
\t | 水平制表符 |
\v | 垂直制表符 |
\| 反斜杠(\) | |
\’ | 单引号 |
\“ | 双引号 |
\? | 问号 |
\0oo | 八进制 |
\xxh | 十六进制 |
转义序列和单个字符赋值给字符变量是要用单引号括起来 |
复数和虚数类型
C语言中有3种复数类型:float_Complex、double_Complex和long double_Complex
C语言中有3种叙述类型:float_Imaginary、double_Imaginary和long double _Imaginary
如果包含头文件complex.h,便可以用complex代替_Complex
传递给函数的信息被称为参数
程序员要负责确保转换说明的数量、类型与后面参数的数量、类型相匹配
第4章 字符串和格式化输入/输出
4.1
#include<string.h> //提供strlen()函数的原型 获取字符串长度
size=sizeof name; //获取char name[40]多大此处为40bytes
使用%s转换处理字符串的输入输出
4.2.1
数组末尾位置的字符\0 是空字符 用来标志字符串的结束
空字符不是数字0 是非打印字符 其ASCII码值是0
C中的字符串一定以空字符结束 这意味着数组的容量必须至少比待储存字符串的字符数多1
什么是数组?
数组是同类型数据元素的有序序列
4.2.3
sizeof运算符 它以字节为单位给出对象的大小 计空字符
strlen()函数给出字符串中的字符长度 不计空字符
4.3常量和C预处理器
#define NAME value
用大写表示符号常量是C语言一贯的传统 名称前带c_或k_前缀表示常量
%1.2f表明结果被四舍五入位两位小数输出
const关键字用于限定一个变量为只读
C头文件limits.h and float.h分别提供了与整数类型和浮点数类型大小限制相关的详细信息p79明示常量表
4.4printf()和scanf()
%a %A 浮点数、十六进制数和p记数法
%c 单个字符
%d 有符号十进制整数
%e %E 浮点数,e记数法
%f 浮点数,十进制记数法
%g %G 根据值的不同,自动选择%f或%e %e格式用于指数小于-4或者大于或等于精度时
%i 有符号十进制整数(与%d相同)
%o 无符号八进制数
%p 指针
%s 字符串
%u 无符号十进制数
%x %X无符号十六进制数,使用十六进制数0f 0F
%% 打印一个百分号
printf()的修饰符详见p83
第5章 运算符、表达式和语句
用于存储值的数据存储区域统称为数据对象
sizeof(以字节为单位返回运算对象的大小)返回size_t类型的值 这是一个无符号整数类型 但它不是新类型
typedef机制 允许程序员为现有类型创建别名
求模运算符:% 递增运算符:++ 递减运算符:–
优先级:递增递减运算符都有很高的结合优先级,只有圆括号比它们优先级高
如果一个变量出现在一个函数的多个参数中,不要对该变量使用递增或递减运算符;
如果一个变量多次出现在一个表达式中,不要对该变量使用递增或递减运算符
表达式由运算符和运算对象组成
语句是C程序的基本构建块
副作用是对数据对象或文件的修改
序列点是程序执行的点,在该点上,所有的副作用都在进入下一步之前发生 语句中的分号标记了一个序列点
完整表达式(full expression)是指这个表达式不是另一个更大表达式的子表达式
复合语句(compound statement)是用花括号括起来的一条或多条语句,符合语句也成为块(block)
基本的类型转换规则
1.当类型转换出现在表达式时,无论是unsigned还是signed的char和short都会被自动转换成int,如果有必要转换成unsigned int 由于都是由较小类型转换为较大类型,所以这些转换被称为 升级(promotion)
2.涉及两种类型的运算,两个值会被分别转换成两种类型的更高级别
3.类型的级别从高至低依次是long double、double、float、unsigned long long、long long、unsigned long、long、unsigned int、int。例外的情况是当long和int的大小相同时,unsigned int比long级别高。之所以short和char类型没有列出,是因为它们已经被升级到int或unsigned int
4.在赋值表达式语句中,计算的最终结果会被转换成被赋值变量的类型。这个过程可能导致类型升级或降级。所谓降级,是指把一种类型转换成更低级别的类型
5.当作为函数参数传递时,char和short被转换成int,float被转换成double
强制类型转换(cast),即在某个量的前面放置用圆括号括起来的类型名,该类型名即是希望转换成的目标类型。
强制类型转换运算符(cast operator):圆括号和它括起来的类型名
形参:声明参数
实参:函数调用传递的值
形参是变量,实参是函数调用提供的值,实参被赋值给相应的形参
变量名是私有的
原型(prototype)即是函数的声明,描述了函数的返回值和参数。
第6章 C控制语句:循环
while语句
while(expression)
statement
fabs()函数 可以方便的比较浮点数 该函数返回一个浮点数的绝对值 在math.h头文件中
优先级:赋值运算<关系运算符<算数运算符
不确定循环(indefinite loop):预先不知道会循环多少次 如用户输入
计数循环(counting loop):执行循环之前就定义好会循环多少次
for语句
for(initialize;test;update)
statement
在test为假之前重复执行statement部分
入口条件循环(entry condition loop):while循环、for循环 在每次迭代之前检测测试条件 所以有可能根本不执行循环体中的内容
出口条件循环(exit condition loop):do while 循环 每次迭代之后检查测试条件 保证了至少执行循环体中的内容一次
do while语句
do
statement
while(expression);
嵌套循环(nested loop):在一个循环内包含另一个循环
数组(array):按顺序存储的一系列类型相同的值
用于识别数组元素的数字被称为下标(subscript)、索引(indice)、或偏移量(offset)
幂函数pow()