《C程序设计》复习资料知识点总结(C语言)

1.1. C语言属高级语言,区分字母的大小写,以函数为基本单位采用模块化程序设计,可直接访问内存,进而对硬件进行操作。

1.2. 用C语言编写和程序称作C源程序,简称C程序,C程序可由若干个文本文件组成,文件扩展名为C(使用C++编译器时默认扩展名为CPP)。C源程序经编译、连接后得到扩展名为EXE的可执行文件(目标程序)。

预处理 编译、连接 执行

若干个C程序文件—-→C程序——→目标程序文件–→

1.3. C程序从主函数开始执行,每个C程序有且仅有一个主函数,因此,每个C程序文件中至多有一个主函数。

1.4. C语句以分号结尾,用{}括起来的一组语句称作复合语句,复合语句可省略花括号之后的分号。

1.5. 允许一行内写多个C语句,也允许一个C语句占用多行,但保留字和标识符不可拆行。

1.6. 在C集成环境VC++ 6.0中,新建工程、保存当前程序文件、编译当前程序、执行当前程序的快捷键依次为:Ctrl+N、Ctrl+S、F7、Ctrl+F5。

2.1. 解决问题的方法和步骤称作算法。算法和数据结构是程序的两个主要要素。

2.2. 算法具有确定性、有穷性、有效性等特点。

2.3. 算法可用自然语言、流程图、N-S图、计算机语言、伪代码等描述。伪代码是用介于自然语言和计算机语言之间的文字和符号来描述算法。

起止框

输入输出框

判断框

处理框

注释框 ……

连接点 〇

流程线 有向线段或折线

图2.1 ANSI流程图符号

2.4. 算法的基本结构分为:顺序结构、选择结构、循环结构。

↓←-

–┐

Y┌

条件

┐N

条件

┐N

↓Y

条件

┘Y

└—

→↓←

—┘

↓←-

–┘

↓N

图2.2 顺序结构 图2.3 选择结构 图2.4 当循环 图2.5 直到循环

条件

条件

循环体

Y

N

循环体

条件

图2.6 顺序结构 图2.7 选择结构 图2.8 当循环 图2.9 直到循环

2.5. 由三种基本结构组成的程序称作结构化程序,结构化程序中的每个模块只有一个入口和一个出口。结构化程序设计通常采用“自顶向下、逐步细化”的设计方法。

3.1. C的数据类型如下所示:

表3.1 C语言的数据类型

数据类型

字节数

数值范围

基本类型

整型

无符号短整型( short int)

4

0~216-1

有符号短整型( )

2

-215~215-1

无符号长整型( int)

4

0~232-1

有符号长整型(signed int)

4

-231~231-1

实型

单精度实型(float)

4

长37位,6位有效

双精度实型(double)

8

长307位,15位有效

长双精度实型(long double)

10

长4931位,18位有效

字符型(char)

1

0~28-1

空类型(void)

1

构造类型

枚举类型

2

指针类型

2

数组类型

结构体类型

共用体类型

3.2. C符号常量名、变量名、函数名等统称标识符,标识符的命名规则为:以字母或下划线开头,由字母、数字、下划线组成,超出32个字符部分被忽略(最好不超过8个字符)。

3.3. 以0开头的整数为八进制整数,以0X或0x开头的整数为十六进制无符号整数。

3.4. -32768~32767为int型,0U~65535U为unsigned型,65536U~4294967295U和0UL~4294967295UL为unsigned long型,-2147483648~-32769、32768~2147483647和-2147483648L~2147483647L为long型。后缀U和L不区分大小写和次序。

3.5. 数据的存储字节数可用运算符sizeof()查询,括号内可是数据、表达式或类型名。

3.6. 有符号整数(int和long)按补码存储,因此,-65535U~-1U与1U~65535U依次相等,-4294967295UL~-1UL与1UL~4294967295UL依次相等。

3.7. 定点数(含小数点数)和浮点数统称C实型常量,浮点数的一般形式为:

尾数e除码 或 尾数E除码

其含义为:

尾数×10除码

其中,尾数为定点数或整数,除码为整数。标准浮点数的小数点在第1位非0数字之后。后缀L或l的实型常量为长双精度,无后缀实型常量为双精度。

3.8. 用一对单引号括起来的单个字符称作C字符常量,其值为该字符的ASCII码(1字节无符号整数)。

3.9. 转义字符\’\\n\’、\’\\t\’、\’\\\\\’、\’\\\’\’、\’\\\”\’分别表示回车符、制表符、反斜杠、单引号、双引号。

3.10. 转义字符\’\\整数\’、\’\\x整数\’(或\’\\X整数\’)中的整数分别为八进制、十六进制,表示以此整数为ASCII码的字符。

3.11. 用双引号括起来的一串字符称作C字符串型常量,串中字符数称作串长,可以为0。字符串的存储形式为:依次存储字符串中字符的ASCII码,并追加一个空字符\’\\0\’(1字节无符号整数0)。

3.12. 字符型、整型、实型数据统称数值型数据,不同类型的数值型数据可以混合运算,低精度数据被自动强制转换为高精度数据后方参与运算。另外,字符常量为有符号短整数,两个字符型数据间的运算按有符号短整数处理。

3.13. 如果将数值型数据赋给不同类型的数值型变量,则数值型数据将被自动强制转换为变量的数据类型。

3.14. C允许定义变量的同时赋初值。

3.15. C运算符及其优先级、结合性如附录C(教材第365页)所示。

3.16. 强制数据类型转换的一般形式为:

(类型名)数据

3.17. 自增++、自减–运算只能作用于变量,作用于右侧时,返回变量自增、自减前的值。

3.18. 赋值表达式的格式为:

变量=表达式 或 变量op=表达式

其中,op为运算符 +、-、*、/、%、>>、<<、&、^、| 中某一个。前者将右边表达式的值赋给左边的变量,后者将左边变量的当前值与右边表达式的值作相应运算后仍赋给左边的变量。整个赋值表达式取左边变量所赋的新值。

3.19. 用逗号分隔的一组表达式称作逗号表达式,其一般形式为:

表达式, 表达式, …, 表达式

其功能为:从左至右依次计算各表达式的值,并以最后一个表达式的值为整个逗号表达式的值。

3.20. 将数学式改为C表达式时应注意:

(1) 乘号*不可省略;

(2) 正确改写脚码、运算符、括号等;

(3) 正确书写函数名;

(4) 把握好运算优先级,分数线改为/时,分子、分母相应加括号;

(5) 正确拆分不等式组;

(6) 区分整数除法和实数除法。

4.1. 表达式后缀分号称作表达式语句,即,

表达式;

4.2. putchar、getchar、printf、scanf等输入输出函数的原型在头文件stdio.h中。

4.3. 函数putchar和getchar的格式和功能如下:

(1) putchar

格式:putchar(表达式)

功能:向标准输出设备输出以指定表达式的值为ASCII码的字符,并以该值为函数值(自动强制转换为int型)。

(2) getchar

格式:getchar()

功能:从标准输入设备输入一个字符,并以该字符为函数值。

注意:getchar可提取空格及回车、Tab等部分控制字符,而且只提取输入中相应位置上的一个字符,因此,输入字符间无须分隔,否则也被视为输入字符。

4.4. printf函数的格式和功能如下:

格式:printf(格式控制串, 输出表列)

功能:

(1) 从右至左依次计算输出表列中各表达式的值;

(2) 从左至右依次输出格式控制串中的字符,其中,%引导的格式控制符由输出表列中相应表达式的值所取代。

输出表列是一组用逗号分隔的表达式(又称输出项,可以为0项)。格式控制串为字符串型数据(可以是表达式)。其中,格式符用于控制输出表列中相应表达式的输出格式。格式符及其功能如下表所示:

表4.1 printf格式字符

格式符

说明

d或i

有符号十进制短整数(不输出正号)

u

无符号十进制短整数

o

无符号八进制短整数(无前缀0)

x或X

无符号十六进制短整数(无前缀0x,数字的大小写与x相同)

c

字符

s

字符串

f

定点数(默认6位小数)。

e或E

浮点数(浮点数中e的大小写与格式符e的大小写相同)

g或G

%f和%e中输出宽度较短者(e与g的大小写相同)

附加格式符

说明

l

插在%和d、i、u、o、x、X之间,表示输出相应长整数。

整数

插在%和其它格式符之间,前一个整数的绝对值为输出数据的宽度,后一个整数控制实际输出位数:①输出整数时,指定输出位数,不足左补0,超出保留;②输出实数时,指定输出小数位数,不足右补0,超出四舍五入;③输出字符串时,指定输出字符数。另外,第一个整数为负时,输出数据左对齐,否则右对齐。

.整数

整数.整数

4.5. scanf函数的格式和功能如下:

格式:scanf(格式控制串, 地址表列)

其中,格式控制串为字符串型数据(可以是表达式),地址表列是一组用逗号分隔的地址。

功能:

(1) 右至左依次计算地址表列中各表达式的值;

(2) 从标准输入设备提取数据,并从左至右依次存储到所指定的存储单元。

(3) 地址表列中的地址可用表达式表示,通常形式为:

&变量

其中&是地址运算符,它表示取其后变量的存储(起始)地址。

说明:

(1) scanf函数格式符与printf函数的格式符的功能相似。scanf的合法格式符不区分大小写、实型格式符均等效,另外,

表4.2 scanf的附加格式符说明

附加格式符

说明

正整数

指定输入数据的最大宽度(插在%与其它格式符之间)

*

跳过当前一个数据(插在%与其它格式符之间)

*正整数

跳过当前指定个字符(插在%与其它格式符之间)

(2) 如果格式控制串中有非格式符,则输入数据中对应位置上必须是该字符,且被跳过,这为指定数据间分隔符提供了方便。

(3) printf和scanf格式控制串中的每对%%(从左至右结合)按一个普通字符%对待。

5.1. C逻辑值为短整数(int),真、假分别为1、0。另外,字符、数、指针作为逻辑量时,非0、非空为真(即1),0、空为假(即0)。逻辑运算如下表所示:

表5.1 逻辑运算真值表

左元

右元

!右元

左元&&右元

左元||右元

假(0)

假(0)

真(1)

假(0)

假(0)

假(0)

真(非0)

假(0)

假(0)

真(1)

真(非0)

假(0)

真(1)

假(0)

真(1)

真(非0)

真(非0)

假(0)

真(1)

真(1)

5.2. 对于形如

□||□||…

的逻辑式,从左至右计算□的逻辑值,遇到真则提前终止。

5.3. 对于形如

□&&□&&…

的逻辑式,从左至右计算□的逻辑值,遇到假则提前终止。

5.4. 算术、关系、逻辑运算的优先级参见附录C(教材第365页)。

5.5. if语句的格式和功能如下:

(1) 格式一:if(条件) 语句

功能:如果条件成立,方执行语句。

(2) 格式二:if(条件)语句1 else 语句2

功能 如果条件成立,执行语句1,否则执行语句2。

注意:else不可独立使用,它与其前最近一个尚未配对的if配对,为避免歧义,通常只在else中嵌套if语句。

5.6. 条件表达式的格式和功能如下:

格式:条件?表达式1:表达式2

功能:如果条件成立,取表达式1的值,否则取表达式2的值。

说明:条件表达式可以嵌套,与其前最近一个尚未配对的if配对。

5.7. switch语句的格式和功能如下:

格式:

switch(表达式)

{

case 常量i: 语句组i

default: 语句组n+1

}

功能:如果表达式的值等于常量i,则从语句组i开始执行,否则执行语句组n+1。

说明:

(1) “表达式”的值和“常量”为整型(包括字符型)。

(2) switch中的每个语句组称作一个分支,为使各分支独立,通常以break、return、exit等语句结尾。另外,“default: 语句组n+1”可以缺省。

5.8. break语句的格式和功能如下:

格式:break;

功能:结束本层switch语句或本层循环语句。

说明:break语句只能用于switch语句和循环。

6.1. while语句的格式和功能如下:

格式:while(表达式)循环体

功能:当表达式的值为真时,重复执行其后循环体。

说明:循环体是循环语句的内嵌语句,可以是空或复合语句(下同)。

6.2. do-while语句的格式和功能如下:

格式:do 循环体 while(表达式)

功能:重复执行循环体,直到表达式的值为假。

说明:do-while循环至少执行一次循环体。

6.3. for语句的格式和功能如下:

格式:for(表达式1; 表达式2; 表达式3) 循环体

功能:

(1) 计算表达式1;

(2) 当表达式2的值为真时,重复执行循环体和计算表达式3。

说明:表达式1、表达式2、表达式3均可缺省,但保留分号。

6.4. continue语句的格式和功能如下:

格式:continue;

功能:跳过循环体中其后程序段(结束本次循环)。

说明:continue语句只能用于循环。

6.5. 掌握以下算法:累加、阶乘、判断素数、分解整数数字、递推数列、打印字符图形。

7.1. 同一类型数据的序列称作数组,数组中数据用相应下标变量访问,因此,数组亦可视为由下标变量组成的序列。

7.2. 定义数组语句的一般格式和功能为:

格式:数据类型名 数组名[第1维长度]…[第n维长度]

功能:为数组分配连续内存单元,用于存储数组中的下标变量(低维优先),并将起始地址(又称基址)赋给数组名。

说明:数组长度只能为整型常量或整型常量表达式。

7.3. 数组的要素有:数据类型、数组名、维数及各维的长度。各维的长度必须是常量,可用常量表达式表示,其值的整数位有效——截断取整。

7.4. 下标变量的格式为:

数组名[第1维下标]…[第n维下标]

7.5. 下标从0开始,可用表达式表示,其值的整数位有效。下标最大值比长度小1。

7.6. 下标变量的使用与普通变量相同。

7.7. 定义数组的同时可对数组中的下标变量赋初值。

格式:数据类型名 数组名[第1维长度]…[第n维长度]={数据表}

功能:定义数组的同时将数据表中数据依次赋给数组中下标变量,未赋值下标变量的初值为相应数据类型的0。

说明:数据表中的数据必须是常量,可用表达式表示。第1维长度可省略,如果省略,其长度由数据表和其它维长度确定——存储所需的最小长度。

7.8. 以字符为数据元素的数组称作字符数组,它由一组字符型下标变量组成。除赋值外,字符数组名的使用与字符串变量相似。字符数组也可用字符串初始化。

7.9. 标准函数库提供许多用于处理字符串的函数。

表7.1 常用字符串处理函数

格式

功能

头文件

puts(串)

依次输出串中字符,遇到\’\\0\’终止,然后换行。

stdio.h

gets(串)

读入一行字符,依次存入所分配的内存空间,并追加\’\\0\’。

strcat(串1, 串2)

将串2复制、连接到串1的第一个\’\\0\’处。

string.h

strcpy(串1, 串2)

将串2复制到串1。

strcmp(串1, 串2)

比较串1和串2的大小。

strlen(串)

求字符串的长度。

strlwr(串)

将串中大写字母均转换为相应小写字母。

strupr(串)

将串中小写字母均转换为相应大写字母。

注意:输出字符串及处理字符串的函数,均忽略字符串中第一个\’\\0\’及其后的字符。

7.10. 掌握冒泡排序。

8.1. 自定义函数的格式为:

函数值类型 函数名(带类型声明的形参表列) {函数体}

8.2. 函数值的默认数据类型为int。

8.3. 如果函数有返回值,则用return语句返回,其格式为:

return 表达式; 或 return(表达式);

8.4. 如果函数无返回值,即函数值类型为void,亦可用格式:

return;

结束本函数并返回调用者。

8.5. 函数一般调用格式为:

函数名(实参表列)

其中,实参表列为一组逗号分隔的表达式。实参按从右至左的次序计算并传递给相应形参。

8.6. 如果函数调用在其定义之前,调用前应作相应声明,声明格式为:

函数值类型名 函数名(形参及其类型声明表列);

其中,形参可省略。

8.7. 函数不可嵌套定义,但允许嵌套调用,亦可直接或间接调用自身(称作递归函数)。

8.8. 递归函数的函数体的一般格式为:(B班同学不作要求)

if(递归条件)语句1 /*递归时,如何递归*/

else 语句2 /*非递归时,如何处理*/

if(!递归条件)语句1 /*非递归时,如何处理*/

else 语句2 /*递归时,如何递归*/

8.9. 形参及函数内定义的变量称作局部变量,它从定义处生效,且只在该函数内有效。因此,不同函数中的局部变量可以同名,但同名不同义。

8.10. 在所有函数之外定义的变量称作全局变量,它从定义处生效。

8.11. 如果局部变量与全局变量同名,则同名全局变量被屏蔽。

8.12. 局部变量的存储方式分为:自动(auto,默认)、静态(static)、寄存器(register)。

8.13. 存储方式和数据类型是变量的两个重要属性,必须在定义变量时一并声明,关键字的排列顺序没有限制。变量的默认数据类型为int,默认存储方式为auto,但关键字auto和int不可同时缺省。

8.14. auto型局部变量占用动态数据区,当函数调用结束时释放所占内存。register占用CPU中的寄存器,但寄存器不够用时,占用动态数据区。

8.15. 全局变量和static型局部变量占用静态数据区,默认初值为相应数据类型的0。

8.16. static型局部变量的声明和初始化只执行一次。

8.17. 如果全局变量被声明为static型,则其它程序文件不能使用该全局变量。否则,其它程序文件也可使用该全局变量,但使用前应作extern声明。

8.18. 被声明为static型的函数,只在本程序文件中有效,不能被其它程序文件调用。否则,其它程序文件也可调用此函数,但调用前应作extern声明。

8.19. 常用数学函数在头文件math.h中。掌握基本初等函数。

9.1. 预处理命令在程序编译前执行,其主要功能是“文本置换”。

9.2. 不带参数宏定义的格式和功能如下:

格式:#define 宏名 文本

功能:在预处理时,将程序中宏名用相应的文本置换。

9.3. 带参数宏定义的格式和功能如下:

格式:#define 宏名(形参表列) 文本

功能:在预处理时,将程序中带参数的宏用相应的文本置换,且文本中的形参被相应的实参所置换。

注意:形参无须且做类型声明。

9.4. 终止宏定义的格式如下:

格式 #undef 宏名

9.5. 宏定义可以引用已有的宏,亦可重新定义所代表的文本。

9.6. 预处理命令无须以分号结尾,否则分号也参与置换。

9.7. #include命令的格式和功能如下:

格式一:#include \”文件名\”

格式二:#include <文件名>

功能:在预处理时,用指定文件置换本命令——加载文件。置换后,被包含文件成为本文件的一部分,其函数、全局变量等均可在本文件中直接使用,无须作extern声明。前一种格式先在当前目录中找指定文件,如果未找到,方到存放C头文件的目录中查找。后一种格式直接到存放C头文件的目录中查找指定文件。

9.8. 条件编译命令的格式和功能如下:

格式一:#ifdef 宏名 程序段1 #else 程序段2 #endif

功能:在预处理时,如果指定的宏名已定义,则用程序段1置换本命令,否则用程序段2置换本命令。当程序段2为空时,#else可省略(下同)。

格式二:#ifndef 宏名 程序段1 #else 程序段2 #endif

功能:在预处理时,如果指定的宏名未定义,则用程序段1置换本命令,否则用程序段2置换本命令。

格式三:#if 常量表达式 程序段1 #else 程序段2 #endif

功能:在预处理时,如果指定常量表达式的值为真(非0),则用程序段1置换本命令,否则用程序段2置换本命令。

9.9. 注释命令在预处理时被删除,不影响源程序和目标程序。注释命令的格式如下:

/*注释内容*/

10.1. 内存的基本单位是字节,每个字节都有相应的编号,称作地址或指针。借助于指针,C语言可以直接访问内存,从而对硬件进行操作。

10.2. 变量所占用内存的大小由其数据类型决定,变量所占用内存的第1个字节的地址称作该变量的地址或指针,表为:

&变量名

10.3. 指针所指向数据的类型称作该指针的基类型,它所指向数据用

*指针

访问,可作为普通变量使用。

10.4. 指针本身也是一种数据类型,占用2字节内存,可作为无符号整数输出和参与关系运算、逻辑运算,但指针的其它运算不同于整数运算。

10.5. 指针运算可简单地分为以下五类:

(1) 单目运算有六个:!、&、*、++、–、sizeof。

(2) 双目运算有四种:-、关系运算、逻辑运算、赋值运算。

(3) 指针与整数间的运算有三个:+、-、[ ]。

(4) 强制类型转换运算:( )。

(5) 结构体成员运算:->。

其中,+、-、++、–、+=、-=均以基类型数据为基本单位。

10.6. 一维数组的数组名可作为指针调用,它指向数组中的第一个元素,以数组中元素的类型为基类型。数组名的值不可修改,且sizeof(数组名)的值为整个数组所占内存的字节数。

10.7. 对于一维数组来说,

基址+i 和 &基址[i]

均指向数组中的第i+1个元素(i>=0);

*(基址+i) 和 基址[i]

均表示数组中的第i+1个元素(i>=0)。

10.8. n维数组可看作是以n-1维数组为元素的一维数组,数组名可看作是指向数组中的第一个n-1维数组的指针。

10.9. 下标变量可作为实参,但不可作为形参,实际上,它被误认为指针。

10.10. ※ C源程序经编译后,系统为源程序中的每个函数均分配一个入口地址,称作函数指针。在C源程序中,函数指针用函数名表示,其值不可修改。以函数指针为值的变量称作函数指针变量,其定义格式为:

函数类型名(*函数指针变量名)( );

可用下述格式代替函数名:

(*函数指针)

10.11. ※ 函数返回值可以是指针,定义函数的一般格式为:

基类型 *函数名(形参列表){函数体}

10.12. 不允许将非0数直接赋给指针变量,须做强制转换。当指针变量的值为0时,称之为空指针。

10.13. ※ 以指针为元素的数组称作指针数组。

10.14. ※ 以指针为基类型的指针称作指向指针的指针,以指向指针的指针为值的变量称作指向指针的指针变量,其定义格式为:

存储方式关键字 基类型名 **指向指针的指针变量名

10.15. ※ C源程序经编译、连接所得目标程序(exe文件)可作为DOS外部命令使用,命令行的一般式为:

路径\\目标程序文件名 参数1 参数2 … 参数n

10.16. ※ C主函数main可带两个形参,前者为int型,用于接收命令行中字符串个数,后者为字符串指针数组,用于接收命令行中各字符串。带参主函数的格式为:

void main(int 形参1,char *形参2[ ]) {函数体}

其中,

形参1=参数个数+1

形参2[0]=\”路径\\目标程序文件名\”

形参2[i]=\”参数i\”,i=1,2,…,n

11.1. 声明结构体语句的一般格式为:

struct 标识符{成员表列};

其中,成员表列为一组声明变量的语句,这些变量称作该结构体的成员,又称数据项、分量、域、字段等。语句结尾处的分号不可缺省,标识符可以省略,如果不省略标识符,则新增一个数据类型(名):

struct 标识符

11.2. 定义结构体变量的一般格式为:

struct 标识符 变量表列;

也可在声明结构体的同时定义变量:

struct 标识符{成员表列}变量表列;

11.3. 结构体变量可在定义时赋初值,类似于数组赋初值。

11.4. 结构体变量的整体使用有以下四种:

(1) 赋值:结构体变量=同类型结构体变量

(2) 求存储量:sizeof(结构体变量)

(3) 取地址:&结构体变量

(4) 初始化——与数组初始化相似。

11.5. 结构体中成员可作为普通变量使用,成员的访问格式为:

结构体变量名.成员名 或 结构体指针->成员名

11.6. 结构体中的成员名只在该结构体类数据中有效,因此,不同结构体中的成员可以同名,成员名也可与普通变量同名。

11.7. 结构体中的成员可以是指针,其基类型可是正在定义或尚未定义的结构体。

11.8. 以同一类型结构体为元素的数组称作结构体数组,以结构体为基类型的指针称作结构体指针。结构体数组和指针的定义和使用与基本类型数组和指针相似。

11.9. 共用体与结构体相似,主要区别有:

(1) 定义共用体的保留字为union;

(2) 同一共用体各成员的基址相同,访问成员时必须与最后所存数据的类型相同,共用体数据所占内存与其成员中所占内存最大者相同;

(3) 不可初始化共用体变量。

11.10. 读取共用体成员时,应按最后一次所存入成员的数据类型读取。

11.11. 共用体和结构体的成员可以是已存在的共用体和结构体,但不可嵌套定义。

11.12. 声明枚举类型语句的一般格式和功能为:

格式:enum 标识符{枚举元素列表}变量列表;

功能:

(1) 显式或隐式指定所列枚举元素所代表的整数;

(2) 如果不省略标识符,则定义一个枚举类型(名):

enum 标识符

枚举元素表是一组用逗号分隔的标识符或整数常量赋值表达式,第一个枚举元素的默认值为0,其它枚举元素的值为前者加1。

11.13. typedef语句的格式和功能为:

格式:typedef 数据类型名 别名1,…,别名n;

功能:给指定数据类型增加一组名称。

11.14. typedef语句也可在声明结构体、共用体、枚举类型的同时给它增加一组名称。

13.1. 文件是存储在外部介质(存储器)上的数据集合,每个文件均有标识符,称作文件名。

13.2. C所使用的数据文件分为文本文件和二进制文件。文本文件以字符为基本单位,存储字符所对应的ASCII码,又称TXT文件或ASCII文件;二进制文件中的数据存储形式与内存中存储形式相同。

13.3. 指向文件结构体的指针称作文件类型指针,简称文件指针或FILE指针,其定义格式为

FILE *文件指针;

13.4. 读写文件之前须用fopen打开或创建该文件,访问结束后用fclose关闭该文件。

超硬核知识:两万字总结《C++ Primer》要点

对于想要入门C++的同学来说,《C++ Primer》是一本不能错过的入门书籍,它用平易近人的实例化教学激发学生的学习兴趣,帮助学生一步步走进C++的大门。在本文中,作者Jacen用两万多字总结了《C++ Primer 中文版(第五版)》1-16章的阅读要点,可以作为该书的阅读参考。现在到了第六版也没关系。注:原书更为详细,本文仅作学习交流使用。

1.1 编写一个简单的C++程序

每个C++程序都包含一个或多个函数,其中一个必须命名为main.

1.2 初识输入输出

1.3 注释简介

两种:

单行注释://

界定符://

1.4 控制流

while;for;if;

P30-P71

数据类型是程序的基础。C++语言支持广泛的数据类型。

基本内置类型

1.算术类型

2.类型转换

不要混用符号类型和无符号类型。

变量

1.变量定义

(1)基本形式:

类型说明符,随后紧跟着一个或者多个变量名组成的列表,其中变量名以逗号分隔,最后以分号结束。

(2)初始值

在C++中,初始化和赋值是2个完全不同的操作。初始化的含义是创建变量的时候赋予一个初始值,而赋值的含义是把对象的当前值擦除,用一个新值来替代。两者区别很小。

(3)列表初始化

用花括号来初始化变量的方式,称为列表初始化。

(4)默认初始化

如果定义变量没有指定初始值,则变量被默认初始化。

::: tip

例外情况:

定义在函数体内部的内置类型变量将不被初始化,其值未定义。

建议初始化每个内置类型的变量。:::

2.变量声明和定义的关系

变量声明:规定了变量的类型和名字。

变量定义:除声明之外,还需要申请存储空间。

如果想声明一个变量,而非定义它,需要使用extern关键词。

::: tip变量只能被定义一次,但可以被多次声明。:::

3.名字的作用域

作用域:C++中大多数作用域都用花括号分隔。

作用域中一旦声明了某个名字,它所嵌套的所有作用域都能访问该名字。同时,允许在内层作用域中重新定义外层作用域中有的名字。

::: warning如果函数有可能用到某全局变量,则不宜再定义一个同名的局部变量。:::

复合类型

定义:复合类型是基于其他类型定义的类型。

1.引用

引用:为对象起另外一个名字。

::: warning引用必须被初始化。引用本身不是对象,所以不能定义引用的引用。引用要和绑定的对象严格匹配。引用类型的初始值,必须是一个对象。:::

const限定符

定义:const用于定义一个变量,它的值不能被改变。const对象必须初始化。

::: tip

默认状态下,const对象仅在文件内有效。当多个文件出现了同名的const变量时,等同于在不同文件中分别定义了独立的变量。

如果想让const变量在文件间共享,则使用extern修饰。

:::

(1)const的引用

允许为一个常量引用绑定非常量的对象、字面值,甚至是个一般表达式。

一般,引用的类型必须与其所引用对象的类型一致,特殊情况是表达式。

(2)指针和const

弄清楚类型,可以从右边往左边阅读。

(3)顶层const

top-level const 表示指针本身是个常量

low-level const表示指针所指的对象是一个常量。

(4)constexpr和常量表达式

C++新标准规定,允许将变量声明为constexpr类型以便由编译器来验证变量的值是否是一个常量表达式。

处理类型

自定义数据结构

(1)类

数据结构是把一组相关的数据元素组织起来,然后使用它们的策略和方法。

类一般不定义在函数体内,为了确保各个文件中类的定义一致,类通常被定义在头文件中,而且类所在头文件的名字应该与类的名字一样。

头文件通常包含那些被定义一次的实体。

(2)预处理器

一般把预处理变量的名字全部大写。

术语

空指针 :值为0的指针,空指针合法但是不指向任何对象。nullPtr是表示空指针的字面值常量。

void*:可以指向任意非常量的指针类型,不能执行解引用操作。

P74-P118

string表示可变长的字符序列,vector存放的是某种给定类型对象的可变长序列。

命名空间的 using 声明

头文件不应包含using声明。

标准库类型 string

标准库类型 vector

迭代器介绍

数组

多维数组

术语

begin string和vector的成员,返回指向第一个元素的迭代器。也是一个标准库函数,输入一个数组,返回指向该数组首元素的指针。

end string和vector的成员,返回一个尾后迭代器。也是一个标准库函数,输入一个数组, 返回指向该数组尾元素的下一个位置的指针。

P120-P151

4.1 基础

重载运算符:为已经存在的运算符赋予了另外一层含义。

左值、右值:

当一个对象用作右值得时候,用的是对象的值(内容)。

当对象被用作左值得时候,用的是对象的身份(在内存中的位置)。

4.2 算术运算符

%:参与取余运算的运算对象必须是整数类型。

4.3 逻辑和关系运算符

&& 运算符和 || 运算符都是先求左侧运算对象的值再求右侧运算对象的值。

::: warning

进行比较运算的时候,除非比较的对象是bool类型,否则不要使用布尔字面值true,false作为运算对象。

:::

4.4 赋值运算符

4.5 递增和递减运算符

递增运算符 ++

递减运算符 —

4.6 成员访问运算符

4.7 条件运算符

4.8 位运算符

4.9 sizeof运算符

4.10 逗号运算符

逗号运算符含有两个运算对象,按照从左向右的顺序依次求值。

4.11 类型转换

4.12 运算符优先级表

P228-P273

类的基本思想是数据抽象和封装。

抽象是一种依赖于接口和实现分离的编程技术。

封装实现了类的接口和实现的分离。

13.3 交换操作

swap

13.4 拷贝控制示例

P460

13.5 动态内存管理类

P464

P578-P630

(1)控制实例化

当编译器遇到extern模板声明时,它不会在本文件中生成实例化代码。将一个实例化声明为extern就表示承诺在程序其他位置有该实例化的一个非extern声明(定义)。对于一个给定的实例化版本,可能有多个extern声明,但必须只有一个定义。

(2)模板是标准库的基础。

生成特定类或者函数的过程称为实例化。

(3)术语

类模板:模板定义,可从它实例化出特定的类。类模板的定义以关键词template开始,后面跟尖括号对<和>,其内为一个用逗号分隔的一个或多个模板参数的列表,随后是类的定义。

函数模板:模板定义,可从它实例化出特定函数。函数模板的定义以关键词template开始,后跟尖括号<和>,其内以一个用逗号分隔的一个或多个模板参数的列表,随后是函数的定义。

《C++ Primer》

[美] Stanley B. Lippman,Josee Lajoie,Barbara E. Moo 著

王刚 杨巨峰 译

如果只读一本C++书,本书将是你永不局悔的选择

如果只读一本C++书籍,相信所有读过的人都会毫不犹豫选择《C++ Primer(中文版)》,无论初学或老手既可用来理解C++11规则背后的原理,也可用其新语言特性与标准库来快速构建健壮程序,采用中文版页码全面呈现原书大量交叉引用及详尽索引,新式辅学设置与课后操练用于避开陷阱、巩固良法!

书籍结合视频学习效果更佳哟!

写在最后:对于准备成为一名优秀程序员的朋友,如果你想更好的提升你的编程核心能力(内功),让自己成为一个具有真材实料的厉害的程序员,不妨从现在开始!C/C++,永不过时的编程语言~

编程学习书籍分享:

编程学习视频分享:

整理分享(多年学习的源码、项目实战视频、项目笔记,基础入门教程)

欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!

对于C/C++感兴趣可以关注小编在后台私信我:【编程交流】一起来学习哦!可以领取一些C/C++的项目学习视频资料哦!已经设置好了关键词自动回复,自动领取就好了!

本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com

点赞 0
收藏 0

文章为作者独立观点不代本网立场,未经允许不得转载。