语法的使用: 注意事项: 大块的语法用块标注,注意事项标题会用红色标注
目录
2)函数的参数填void,表示函数不需要参数(或者让参数列表空着)。
基础
在文件最开始包含头文件;一个程序只能有一个主函数;可以用<<输出符号对于输出的内容进行拼接;单行注释// 多行注释/* */ ;参数的命名由字母数字下划线组成,提倡见名知意;变量的使用前需要先声明:数据类型 变量名;
常量
1 宏常量需要在main函数前面导入,通常用大写表示:#define 常量名 值
宏常量最后没有符号
2 const修饰的常量:const 数据类型 常量名 = 值
运算
算数运算
/ 除法:两个整数进行除法,舍弃小数部分,只得到整数,整数浮点数运算结果为浮点数
%取余:两个整数相除取余数
关系运算
两个表达式比较,输出结果为1-true 或者 0-false
字符型也可以用于关系判断,常用的有== 和 !=
逻辑运算
&&与 ||或 !非 逻辑运算两边既可以是表达式也可以是数值
逗号运算
把一行语句的多个表达式连接在一起,程序从左向右执行,常用语声明多个变量
例:int a = 1, b =2;
运算优先级
不用特别记忆优先级关系,按照想法的顺序加括号。
条件分支
18 if 语句的基本结构
if (表达式)
{
//表达式为真执行的语句
}
else
{
//表达式为假执行的语句
}
分支内只有一行的时候{}可以不写,如果一行也没有就得写{}
19 嵌套使用 if 语句
if 语句可以嵌套使用,嵌套使用 if 语句的时候,else 总是与前面最近的 if 配对
21 多条件的 if 语句
if (表达式一)
{
// 表达式一为真时执行的语句。
}
else if (表达式二)
{
// 表达式二为真时执行的语句。
}
else if (表达式三)
{
// 表达式三为真时执行的语句。
}
……
else if (表达式n)
{
// 表达式n为真时执行的语句。
}
else
{
// 全部表达式都不为真时执行的语句。
}
23 三目运算符
语法: 表达式一 ? 表达式二 : 表达式三
其实是简单 if 语句的简化。先计算表达式一的值,如果为真,整个表达式的结果为表达式二的值,如果为假,整个表达式的结果为表达式三的值。表达式二后面是英文冒号,表达式一通常需要用括号圈起来,防止系统优先级判断出错。
24 switch 语句
switch (表达式)
{
case 值一:
语句一;
break;
case 值二:
语句二;
break;
......
case 值n:
语句n;
break;
default:
//上述条件都不满足时执行的语句;
}
case后面必须是整数和字符,每个分支不要漏写break;语句。
循环语句
25、while循环语句
while (表达式)
{
语句块
}
26、循环的跳转
break和continue两个关键字用于控制循环体中代码的执行流程。
break跳出(中止)当前循环语句。
continue回到当前循环语句的首部,不再执行后面的语句。
27、for循环语句
for (语句一 ; 表达式 ; 语句二)
{
语句块
}
在函数或语句块内部的语句使用,在函数或语句块外部是不可用的。局部变量在函数返回或语句块结束时由系统收回内存空间。
29、do…while循环语句
do
{
语句块
} while (表达式);
(表达式)后面还有一个分号。
函数基础
31、函数的声明和定义
函数的定义:函数的实现过程。
返回值的数据类型 函数名(参数一的数据类型 参数一, 参数二的数据类型 参数二,……)
{
实现函数功能的代码。
return 返回值;
}
函数的声明:让编译器知道函数的存在,包括返回值的数据类型、函数名和参数列表。
返回值的数据类型 函数名(参数一的数据类型 参数一, 参数二的数据类型 参数二,……) ;
如果函数的声明和定义分开书写,函数的声明后面一定要有分号,函数的定义后面一定不能写分号。函数的声明和定义如果分开,一般在main函数的上面声明,在main函数的下面定义。
32、函数的调用
直接使用之前定义的函数名称,括号里面输入实参,参数要跟定义的参数类型逐个对应。
语法:函数名(参数一,参数二,……)
33、变量的作用域
1)全局变量
在所有函数外面定义的变量是全局变量。
在定义位置之后的任意函数中都能访问。全局变量在主程序退出时由系统收回内存空间。
2)局部变量
在函数和语句块内部定义的变量是局部变量,{}括起来的就是一个语句块。
在函数或语句块内部的语句使用,在函数或语句块外部是不可用的。局部变量在函数返回或语句块结束时由系统收回内存空间。
3)静态局部变量
函数内部用static修饰的是静态局部变量。
用static修饰的局部变量生命周期和程序相同,并且只会被初始化一次。static修饰的变量在程序执行中只会执行一次,当程序想要使用全局变量的时候应该先考虑使用static(考虑到数据安全性)。
for循环初始化语句中定义的变量的作用域是for语句块。语句块外面就不能使用了,如果想要继续使用需要在for语句块外面定义。
34、函数参数的传递
调用函数的时候,调用者把数值赋给了函数的参数。
实参:调用时程序函数名括号中的参数,可以是常量、变量和表达式。
形参:函数在定义的时候,括号里面的参数。
值传递:
在函数定义的代码中,修改形参的值,会不会影响实参。
函数调用时,先声明形参变量类型,之后将实参传递给形参,执行函数体的代码。
35、函数分文件编写
导入系统所生成的库使用<>,导入自创的库使用” ”
头文件(*.h):需要包含的头文件,声明全局变量,函数的声明,数据结构和类的声明等。
源文件(*.cpp):函数的定义、类的定义。在每个源文件都需要导入对应头文件。
主程序:main函数,程序的核心流程,需要用#include "头文件名"把头文件包含进来。
C++数据类型
38、sizeof运算符
sizeof运算符用于求数据类型或变量占用的内存空间。
用于数据类型:sizeof(数据类型)
用于变量:sizeof(变量名) 或 sizeof 变量名
字符串(string)不是C++的基本数据类型,用sizeof求它占用内存的大小没有意义。
42、浮点型(实数型)
C++缺省显示6位有效数字,如果要显示更多的有效数字,可以用printf()函数。
在实际开发中,用整数代替浮点数,整数的运算更快,精度更高。
43、字符型的基本概念(ASCII码)
字符型(char)占用的内存空间是1个字节,字符的本质是整数,书写用单引号包含,也可以用整数。
在内存中,不存放字符本身,而是存放与它对应的编码,即ASCII码。字符的本质是整数,取值范围是0~127。
32是空格
48~57是0到9十个阿拉伯数字
65~90是26个大写英文字母
97~122是26个小写英文字母
44、转义字符
\0 空,给字符型变量赋值时可以直接书写0。
\n 换行(LF) ,将当前位置移到下一行开头。
\t 回车(CR) ,将当前位置移到本行开头
\r 水平制表(HT) (跳到下一个TAB位置)
45、C++11的原始字面量
原始字面量(值)可以直接表示字符串的实际含义,不需要转义和连接。
语法:R"(字符串的内容)"
46、字符串型
C++风格字符串:string 变量名="字符串的内容" ;
C风格字符串:char 变量名[]="字符串的内容" ;
47、布尔型
bool类型本质上是1字节的整数(unsigned char),取值只有1和0。对bool型变量赋非0的值,将转换成1。
48、数据类型的转换
(目标类型)表达式 或 目标类型(表达式)
指针和内存
50、指针的基本概念
C++用运算符&获取变量在内存中的起始地址。
语法:&变量名
指针,它是一种特殊的变量,专用于存放变量在内存中的起始地址。
语法:数据类型* 变量名;
指针变量名跟原变量名不要相同(指针变量也是变量,不能出现重复)
将标黄的二者写到一起记为指针的数据类型,在函数中解引用方便理解
给指针赋值,对指针的赋值操作也通俗的被称为“指向某变量”
语法:指针=&变量名;
在64位的操作系统中,不管是什么类型的指针,占用的内存都是8字节。
51、使用指针
指针存放变量地址,所以指针跟对变量取地址的值相同。
*运算符被称为间接值或解除引用(解引用)运算符,将它用于指针,可以得到该地址的内存中存储的值。可以将指针和值理解为硬币的两面。
数据在存储时要注意3个属性:存放位置,数据类型,值
52、指针用于函数的参数
如果把函数的形参声明为指针,调用的时候把实参的地址传进去,形参中存放的是实参的地址,在函数中通过解引用的方法直接操作内存中的数据,可以修改实数的值,这种方法被通俗的称为地址传递或传地址。
值传递:函数的形参是普通变量。
传地址的意义如下:
可以在函数中修改实参的值。
减少内存拷贝,提升性能。
53、用const修饰指针
1)常量指针(最常用)
语法:const 数据类型 *变量名;
不能通过解引用的方法修改内存地址中的值(用原始的变量名是可以修改的)。
2)指针常量
语法:数据类型 * const 变量名;
指向的变量(对象)不可改变。
3)常指针常量
语法:const 数据类型 * const 变量名;
指向的变量(对象)不可改变,不能通过解引用的方法修改内存地址中的值。
记忆秘诀:*表示指针,指针在前先读指针;指针在前指针就不允许改变。
常量指针:const 数据类型 *变量名
指针常量:数据类型 * const 变量名
54、void关键字
在C++中,void表示为无类型,主要有三个用途:
1)函数的返回值用void,表示函数没有返回值。
void func(int a,int b)
{
// 函数体代码。
return;
}
2)函数的参数填void,表示函数不需要参数(或者让参数列表空着)。
int func(void)
{
// 函数体代码。
return 0;
}
3)形参用void *,表示接受任意数据类型的指针。
不能用void声明变量,它不能代表一个真实的变量,但是,用void *可以。
不能对void *指针直接解引用(需要转换成其它类型的指针)。
把其它类型的指针赋值给void*指针不需要转换。
把void *指针赋值给把其它类型的指针需要转换。