导图社区 C++基础知识
这是一篇关于C基础知识的思维导图,主要内容包括:函数,运算符与表达式,C 程序结构,循环语句,条件判断语句,数据类型。
编辑于2024-08-10 22:03:46C++基础知识
C++程序结构
#include指令
引用头文件
注释
//进行单行注释
/* */进行多行注释
Main函数
主函数,程序执行的入口。
函数体
各代码按照顺序依次执行。
函数的返回值
若main函数要返回数据,需使用return语句。
C++语言中的流
cout
cout<<表达式1<<表达式2<<...<<表达式n;
cout语句可以分写成若干行
cin
cin>>变量1>>变量2>>...>>变量n;
C++语言还保留C语言的输出函数printf
printf("[控制字格式]...[控制字格式]...",数值列表);
数据类型
常用数据类型
整型int
浮点型
字符类型
布尔类型
常量及符号
整型常量
有符号整型常量
无符号整型常量
短整型常量
长整型常量
实型常量
也称浮点数,只能采用十进制形式表示。
两种表示形式
小数表示法
指数表示法
指数部分以符号“E”或“e”开始,必须是整数,并且符号“e”两边都必须有一个数。
E5、3E2.5不是合法实型常量
字符常量
用单引号括起来的一个字符。
字符串常量
用双引号括起来的零个或多个字符的序列。
字符常量‘A’与字符串常量”A“是不同的,字符串”A"是由‘A'和'\0'两个字符组成的。
其他常量
布尔常量
枚举常量
宏定义常量
变量
标识符
由字母、数字以及下划线组成,且不能以数字开头。
区分大小写
不能与关键字同名
尽量“见名知义”,应该受一定规范的约束。
变量与变量声明
整型变量
短整型short:2字节
无符号整型unsigned short:2字节
整型int:4字节
无符号整型unsigned int:4字节
长整型long:4字节
无符号长整型unsigned long:4字节
实型变量
单精度Float:4字节
双精度double:8字节
长双精度long double:10字节
变量赋值
变量赋初值
字符变量
运算符与表达式
运算符
定义:具有运算功能的符号。
根据使用运算符的对象个数分类
单目运算符
双目运算符
三目运算符
根据使用运算符的对象之间的关系分类
算术运算符
加法运算符:+
减法运算符 :-
乘法运算符:*
除法运算符:/;除数或分母不能为0.
模运算符:%;用于求两个整型数值或变量除法运算后的余数。
自增运算符:++
自减运算符:--
关系运算符
分类
小于:<;前者小于后者,运算结果为真。
大于:>;前者大于后者,运算结果为真。
大于等于:>=;前者大于等于后者,运算结果为真。
小于等于:<=;前者小于等于后者,运算结果为真。
恒等于:==;前者恒等于后者,运算结果为真。
不等于:!=;前者不等于后者,运算结果为真。
优先级
关系运算符都是双目运算符,其结合性为左结合。关系运算符的优先级低于算术运算符,高于赋值运算符。
逻辑运算符
分类
逻辑与:&&;同为真则真,见假则假。
逻辑或:||;同为假则假,见真则真。
逻辑非:!;用于对一个对象的取反运算。
优先级
逻辑运算符可以嵌套,遵循左结合性。
位运算符
分类
位逻辑与:&
位逻辑或:|
位逻辑异或:^
取反运算符:~
优先级
由高到低:~,&,^,|
移位运算符
左移:<<;将二进制数向左移动指定位数,左边溢出的位被丢弃,右边的空位用0补充,相当于乘以2的幂。
右移:>>;将二进制数向右移动指定位数,右边溢出的位被丢弃,左边的空位用0补充,相当于除以2的幂。
赋值运算符
简单赋值运算符:=;变量 = 表达式;
复合赋值运算符
定义:带有运算的赋值运算符。
分类
加法赋值:+=
减法赋值:-=
乘法赋值:*=
除法赋值:/=
模运算赋值:%=
左移赋值:<<=
右移赋值:>>=
按位与运算赋值:&=
按位或运算赋值:|=
按位异或运算赋值:^=
sizeof运算符
sizeof(类型说明符)或sizeof(表达式)
sizeof的功能是返回指定的数据类型或表达式在内存中占用的字节数。
条件运算符
语法格式:<表达式1>?<表达式2>:<表达式3>;
执行逻辑:若表达式1为真,则运算结果为表达式2;若表达式1为假,则运算结果为表达式3.
逗号运算符
逗号运算符的优先级最低,结合方向自左向右。
功能作用:将两个或任意多个表达式组成一个表达式;
举例: x,y,z; a=1,b=2;
结合性和优先级
结合性和优先级表格
右结合
左结合
同一优先级的优先级别相同,运算次序由结合方向决定。
规律总结
从操作数个数来看,单目运算符的优先级高于双目运算符的优先级,双目运算符的优先级也高于三目运算符的优先级。
按照运算符的作用来看,()、[]这种级别最高,之后就是算术运算符,移位运算符,关系运算符,位运算符,逻辑运算符,赋值运算符
表达式
定义:由运算符、括号、数值对象或变量等元素构成。
分类
算术表达式:表达式 算术运算符 表达式;
若所有运算符数量类型相同,则表达式运算结果的数据类型和操作数的数据类型相同;
若操作数的数据类型不同,就需要转换,表达式运算结果的数据类型取最高的数据类型。
关系表达式:表达式 关系运算符 表达式
条件表达式:关系表达式 ?表达式 :表达式
若“?"前表达式为真,则整个表达式的运算结果和数据类型与冒号前的操作数相同;
若“?"前表达式为假,则整个表达式的运算结果和数据类型与冒号后的操作数相同;
赋值表达式:表达式 赋值运算符 表达式;
赋值表达式的结果是赋值运算符左边变量或表达式的值;
赋值运算符的结合性为由右向左;
逻辑表达式:表达式 逻辑运算符 表达式;
逻辑运算符两侧的操作数,除可以是0和非0的整数外,也可以是其它任何类型的数据。如实型,字符型等。
在计算逻辑表达式时,只有在必须执行下一个表达式时才求解该表达式,即并不是所有表达式都要求解。例如:对于逻辑与运算,若第一个操作数为假,系统不再求解第二个操作数。
逗号表达式:表达式1,表达式2,......,表达式n;
逗号表达式可以嵌套:表达式1,(表达式2,表达式3)
嵌套的逗号表达式可以转换成扩展形式:表达式1,表达式2,...... ,表达式n;
整个逗号表达式的值等于表达式n的值。如“res1=a,res2=b+c;”res2是整个逗号表达式的值。
程序中的逗号表达式通常是要分别求逗号表达式内各表达式的值,并不一定要求整个逗号表达式的值。
并不是在所有出现逗号的地方都能形成逗号表达式。如在变量声明中,函数参数表中的逗号只是用作各变量之间的间隔符。
表达式中的类型转换
隐式转换
1、若参与运算的类型不同,则先转换成同一类型,然后进行计算。一般赋值号右边量的类型转换为左边量的类型。如果右边量的数据类型长度比左边长,将丢失一部分数据,会降低精度,丢失的部分按四舍五入向前舍入。
2、转换按数据由低到高顺序执行,以保证精度不降低。
int型和long型运算时,先把int转成long型后再进行计算。
所有浮点运算都是以双精度进行的,即使仅含float单精度量运算的表达式,也要先转换成double型,再进行计算。
char型和short型参与计算时,必须先转换成int型。
强制类型转换
书写形式: 类型说明符 (表达式) (类型说明符) 表达式
作用:将表达式的运算结果强制转换成类型说明符表示的类型。
强制类型转换不改变数据说明时对变量定义的类型。如下x仍为双精度类型。 double x; (int)x;
条件判断语句
if语句
if(表达式) 语句
if(表达式) 语句1; else 语句2;
if(表达式1) 语句1; else if(表达式2) 语句2; ... else if(表达式m) 语句m; else 语句n;
使用条件运算符判断“ ? : ”
switch语句
switch(表达式) { case 常量表达式1: 语句1; break; case 常量表达式2: 语句2; break; ... case 常量表达式n: 语句n; break; default: 语句n+1; }
循环语句
while循环
while(表达式) 语句;
表达式为关系表达式或逻辑表达式,当表达式为真时开始循环执行语句,为假时退出循环,执行循环外的下一条语句。
表达式不能为空,为空不合法。
表达式可以用非0代表逻辑真值(true),用0代表逻辑假值(false)。
循环体中必须有改变条件表达式值的语句,否则将成为死循环。
do...while循环
do 语句 while(表达式);
do为关键字,必须与while配对使用。
特别注意:do...while循环后有分号“;”。
执行顺序:执行循环体中的内容,然后判断表达式的值。
循环先执行循环体,若循环条件不成立,循环体已执行一次,使用时注意变量变化。
表达式不能为空,为空不合法。
表达式可以用非0代表逻辑真值(true),用0代表逻辑假值(false)。
循环体中必须有改变条件表达式值的语句,否则将成为死循环。
注意循环语句后面有分号";".
for循环
for(表达式1;表达式2;表达式3) 语句
表达式1:通常为赋值表达式,给控制循环的变量赋初值;
表达式2:通常为关系表达式,用控制循环的变量和循环变量允许的范围值进行比较。
表达式3:通常为赋值表达式,对控制循环的变量进行增大或减小。
执行过程
(1)求解表达式1;
(2)求解表达式2,若其值为真,则执行for循环体中的内嵌语句,然后执行步骤(3)。若为假,则结束循环,转到步骤(5);
(3)求解表达式3;
(4)返回步骤(2)继续执行;
(5)循环结束,执行for循环后面的其它语句。
注意事项
可在表达式1中直接声明变量,也可以在for循环体语句外声明变量;
for循环中的表达式1、表达式2、表达式3都可以省略;
省略表达式1:如果循环控制变量在循环外声明并赋值,程序能通过编译并正常运行。
省略表达式2:即省略循环判断条件,此时程序缺少终止循环的条件,将编程死循环。
省略表达式3:循环也将成为无限循环。需在执行语句中对循环变量进行增大或减小操作,来满足跳出循环的条件。
省略表达式1和表达式3:与while循环一样了。
3个表达式同时省略:变成死循环,建议在循环体中计数控制,即循环执行到指定次数后就跳出循环。
循环控制
循环控制变量
break语句
跳出当前循环体,从而中断当前循环。
如果遇到嵌套循环时,break语句只能使程序跳出包含它的最内层的循环结构,即只能跳出一层循环。
continue语句
是针对break语句的补充,不是立即跳出循环体,而是跳过本次循环,回到循环条件测试部分,重新开始执行循环。
goto语句
无条件跳转语句,用于改变语句的执行顺序;
goto语句格式:goto 标签;标签是用户自定义的一个标识符。“label:"用于定义一个标签,以冒号结束。
注意事项
定义标签时,其后不能紧接着出现“}”。
goto语句不能越过符合语句之外的变量定义的语句。
goto语句是一种古老的跳转语句,它会使程序的执行顺序变得混乱,CPU不停的跳转,效率比较低,开发程序时慎用goto语句。
循环嵌套
函数
概述
定义:能够实现特定功能的程序模块。
结构: 类型标识符 函数名(形式参数列表) { 变量的声明; 语句; }
函数声明:调用一个函数前需要先声明函数的返回值类型和参数类型。
函数参数与返回值
返回值:函数的返回值通过return语句返回给主调函数,一般形式如下: return (表达式);
返回值类型和函数定义中类型标识符应保持一致,若不一致,则以函数类型为准,自动进行类型转换。
若函数值为整型,在函数定义时可以省去类型标识符。
在函数中允许有多个return语句,但每次调用只能有一个被执行,因此只能返回一个函数值。
不需要返回函数值的函数,可以明确定义为“空类型”,类型标识符为void。
空函数
定义:没有参数和返回值,即函数的作用域为空的函数。
作用:前期开发时先占一个位置,后续补充,程序的结构清楚,可读性好,以后扩充新功能方便,对结构影响不大。
形参与实参
定义:带参函数中的参数在函数声明和定义时被称为形式参数;在函数调用时被赋予具体值,具体的值被称为实际参数。
区别
定义函数时指定的形参,在未出现函数调用前,并不占用内存中的存储单元,只有在发生函数调用时,函数的形参才被分配内存单元,在调用结束后,其所占用的内存单元被释放。
实参是确定的值,在调用时将实参的值赋给形参,如果形参时指针类型,就将地址值传递给形参。
实参与形参的类型相同。
实参与形参之间时单向传递,只能由实参传递给形参,而不能由形参传递给实参。
函数调用
说明
被调用的函数必须是已存在的函数。
若使用库函数,需要将库函数对应的头文件引入,需要使用预编译指令#include。
若使用用户自定义的函数,需要在主调函数前对被调用函数进行声明。
类型
传值调用
嵌套调用
递归调用
变量的作用域
局部变量:在函数体内定义的变量;在函数调用时创建,并在栈中分配内存,函数调用结束后销毁并释放。
全局变量:在函数体外定义的变量;在程序开始时创建并分配空间,在程序结束时释放内存并销毁。
重载函数
指多个函数具有相同的函数名,而参数类型或参数个数不同。
在定义重载函数时,注意函数的返回值类型不作为区分重载函数的一部分。
内联函数
通过inline关键字可以把函数定义为内联函数,编译器会在每个调用该函数的地方展开一个函数副本。
变量的存储类别
auto变量
是C++语言程序中默认的存储类型。
auto变量的作用域仅限于定义该变量的个体内,在函数中定义的auto变量,只在该函数内有效;在复合语句中定义auto变量,只在该复合语句中有效。
auto变量属于动态存储方式。
auto变量的作用域和生存期都局限于定义它的个体内。
static变量
静态局部变量的值在函数调用结束后不消失,静态全局变量只能在本源文件中使用。
static变量在函数内定义,在程序退出时才释放,即在程序整个运行期间都不释放,也就说它的生存期为整个源程序。
static变量的作用域与auto变量相同,在函数内定义在函数内使用,尽管该变量还继续存在但不能使用。只有再次调用定义它的函数时,才可以继续使用。
编译器会为静态局部变量赋予0值。
register变量
register变量属于动态存储方式,凡需要采用静态存储方式的量不能定义为register变量。
编译程序会自动决定哪个变量使用寄存器存储。Register变量起到程序优化的作用。
extern变量
在一个源文件中定义的变量和函数只能被本文件中的函数调用。
使用其它源文件的全局变量时,需要在本源文件中使用extern关键字声明这个变量。