C++学习笔记

Chapt1 常量与变量:

1.1 常量的定义:

	1.宏常量:#define 常量名 常量值

	2.const 数据类型 常量名 = 常量值

1.2 关键字

	(具体有什么慢慢查,蛮多的)

1.3 标识符命名规则

	1.作用:C++规定给标识符(变量、常量)命名时,有一套自己的规则

	2.标识符不能是关键字

	3.标识符只能由字母、数字、下划线组成第一个字符必须为字母或下划线

	4.标识符中字母区分大小写

	(建议:给标识符命名时,争取做到见名知意的效果,方便自己和他人的阅读)

Chapt2 数据类型:

【C++ 规定在创建一个变量或者常量时,必须要指定相应的数据类型,否则无法给变量分配内存】

2.1 整数:

	作用:整型变量表示的是整数类型的数据

	【!!数据类型存在的意义!!】:给变量分配合适的内存空间,避免造成资源的浪费

	C++中表示整形的类型主要有以下几种方式(!!区别在于所占空间不同):
数 据 类 型占用空间取值范围
short(短整型)2字节(-215~215-1)
int(整型)4字节(-231~231-1)
long(长整型)Windows为4字节,Linux为4字节(32位),8字节(64位)(-231~231-1)
long long(长长整型)8字节(-263~263-1)

2.2 sizeof关键字

	作用:利用sizeof关键字可以统计数据类型所占大小

	语法:sizeof(数据类型/变量)

	示例:
		int mian(){
			cout << " short类型所占内存空间为: " << sizeof(short) << endl;
			system(" pause ");
			return 0;

		}

2.3 实型(浮点型)

作用:用于表示小数

浮点型变量分为两种:

	1.单精度:float

	2.双精度:double

	二者的区别在于表示的有效数字范围不同
数 据 类 型占用空间有效数字范围
short(短整型)2字节7位有效数字
int(整型)4字节15~16位有效数字

2.4 字符型(1字节)

	作用:字符型变量用于显示 单个 字符

	语法:char ch = 'a';

	【注意1】:在显示字符型变量时,用单引号将字符括起来,不要用双引号

	【注意2】:单引号内只能有一个字符,不可以是字符串

	C和C++中字符型变量只占用一个字节

	字符型变量并不是把字符本身放到内存中存储,而是将对应的ASCII编码放到储存单元

2.5 转义字符

	作用:用于表示一些不能显示出来的ASCII字符

	常用的转义字符:

		换行符:\n
			cout << "hello world \n";
		反斜杠:\\
			cout << "hello world \\" << endl;
		水平制表符:\t
			cout << "aaa\t hello world"

2.6 字符串型

	作用:用于表示一串字符

	两种风格:
		1.C风格字符串

			char 变量名[] = "字符串值"

		2.C++风格字符串

			string 变量名 = "字符串值"

2.7 布尔类型bool(1字节)

	作用:布尔数据类型代表真或假的值

	bool类型只有两个值:

		true-----真(本质是1)

		false----假(本质是0)

Chapt3 运算符

【用于执行代码的运算】

主要内容包括:

运算符类型作用
算术运算符用于处理四则运算
赋值运算符用于将表达式的值赋给变量
比较运算符用于表达式的比较,并返回一个真值或假值
逻辑运算符用于根据表达式的值返回真值或假值

3.1 算术运算符:

	取模运算(取余运算):只能对整型进行操作

	前置递增:a=2;b=++a;	——结果——>	a=3;b=3;    先让变量+1,然后进行表达式运算

	后置递增:a=2;b=a++;	——结果——>	a=3;b=2;	先进行表达式运算,然后让变量+1

	前置递减:a=2;b=--a;	——结果——>	a=1;b=1;

	后置递减:a=2;b=a--;	——结果——>	a=1;b=2;

3.2 赋值运算符:

	1. =

		int a = 10;
		a = 100;
		cout << " a = " << a << endl;

	2. +=

		int a = 10;
		a += 2;
		cout << "a = " << a << endl;

	3. -=

		a = 10;
		a -= 2;		// a = a - 2
		cout << "a=" << a << endl;

	4. *=

		a = 10;
		a *= 2;		// a = a * 2
		cout << "a=" << a << endl;

	5. /=

		a = 10;
		a /= 2;		// a = a / 2
		cout << "a=" << a << endl;

	6. %=

		a = 10;
		a %= 2;		// a = a % 2
		cout << "a=" << a << endl;

3.3 比较运算符

【用于表达式的比较,并返回一个真值或假值】

	1. ==

	2. !=

	3. >

	4. <

	5. >=

	6. <=

3.4 逻辑运算符

【用于根据表达式的值返回真值或假值】
	1.!(非)

		int a = 10;
		//在C++z中除了0都为真
		cout << !a << endl;
		cout << !!a << endl;

	2.&&(与)

	3.||(或)

Chapt4 程序流程结构

4.1 顺序结构:

	程序顺序执行不发生跳转

4.2 选择结构:

	1. if语句【执行满足条件的语句】

		1.1 单行格式if语句

			if(条件){
				满足条件时执行的语句
			}

		1.2 多行格式if语句

			if(条件){
				满足条件时执行的语句
			}else{
				不满足条件是执行的语句
			}

		1.3 多条件的if语句

			if(条件1){
				满足条件1时执行的语句
			}else if(条件2){
				满足条件2时执行的语句
			}else if(条件3){
				.......
			}......
			............
			else{
				都不满足时执行的语句
			}

		1.4 嵌套if语句【if语句执行语句内部再嵌套if语句】

	2. 三目运算符【作用:通过三目运算符实现简单的判断】

		语法:表达式1 ? 表达式2 : 表达式3

		【解释】:

			如果表达式1为真,执行表达式2,并返回表达式2的结果;
			
			如果表达式1为假,执行表达式3,并返回表达式3的结果;

			example:
				int a = 10;
				int b = 20;
				int c = 0;
				c = (a > b ? a : b);//先在括号内比较a和b的大小,如果a大于b,返回a,即让c = a,否则返回b,c = b
				cout << " c = " << c << endl;
				(a < b ? a : b) = 100;		//在C++中三目运算符返回的是变量,可以继续赋值
				cout << " a = " << a << endl;
				cout << " b = " << b << endl;

	3. switch:【执行多条件分支语句】

		【语法】:
			
			switch(表达式){
				case 结果1: 执行语句; break;  //case的结果是指switch括号中的表达式的结果
				case 结果2: 执行语句; break;
				case 结果3: 执行语句; break;
				. . . . . .
				default: 执行语句; break;
			}

		【缺点】:只能判断整型和字符型,不能是一个区间

		【优点】:结构清晰,执行效率高(比if高)

		【!!注意!!】:

			1. switch语句中表达式类型只能是整型或者字符型

			2. case里如果没有break,那么程序会一直向下执行下去

		【总结】:与if语句相比,对于多条件判断时,switch的结构清晰,执行效率高,缺点是switch不可以判断区间

4.3 循环结构:

	1.while循环语句【满足循环条件,执行循环语句】

		【语法】:while(循环条件){循环语句}

		【解释】:只要循环条件的结果为真,就执行循环语句

		【example】:

			//循环打印0~9
			int num = 0;
			while(num<10){
				cout << num <<endl;
				num++;
			}
		【注意】:在写循环时一定要避免死循环
			
	2. do...while循环语句

		【作用】:满足循环条件,执行循环语句

		【语法】do{循环语句}while(循环条件);

		【注意】与while的区别在于do...while会限制性一次循环语句,在判断循环条件

	3. for循环语句
		
		【作用:满足循环条件,执行循环语句】

		【语法】:for(起始表达式;条件表达式;末尾循环体){循环语句;}

	4. 嵌套循环

4.4 跳转语句

	1. break语句【用于选择结构或循环结构】

		【break的使用时机】:

			1.1 出现在switch条件语句中,作用是终止case并跳出switch

			1.2 出现在循环语句中,作用是跳出当前循环语句

			1.3 出现在嵌套循环中,跳出最近的内层循环语句

	2. continue语句【在循环语句中,跳过本次剩余未执行的语句,继续执行下一次循环】

	3. goto语句【可以无条件跳转语句】

		【语法】:goto标记;

		【解释】:如果标记的名称存在,执行到goto语句时,会跳转到标记的位置

Chapt5 数组:

1. 一维数组的定义方式

	1.1 数据类型 数组名[数组长度];

	1.2 数据类型 数组名[数组长度] = {值1,值2......};

	1.3 数据类型 数组名[] = {值1,值2......};

【数组的特点】:
	
	放在一块连续的内存空间

	数组中每个元素都是相同的数据类型

	数组元素的下标是从0开始索引的

	如果在初始化数据时没有全部填写完,那么会用0来填补完整

2. 一维数组数组名

	一维数组名称的用途:

		1. 可以统计整个数组在内存中的长度

		2. 可以获取数组在内存中的首地址【内存中的地址编号】

3. 冒泡排序

	3.1 比较相邻的元素,如果前一个比后一个大就交换二者的位置

	3.2 对每一对相邻元素执行同样的操作,执行完毕后,找到第一个最大值

	3.2 重复3.1、3.2的操作,每次比较次数-1,直到不再比较

4. 二维数组

	4.1 二维数组的定义方式:

		(1)数据类型 数组名[ 行数 ][ 列数 ];

		(2)数据类型 数组名[ 行数 ][ 列数 ] = {{数据1,数据2},{数据3,数据4}}; //最佳:直观,可读性高

		(3)数据类型 数组名[ 行数 ][ 列数 ] = {数据1,数据2,数据3,数据4};

		(4)数据类型 数组名[ ][ 列数 ] = {数据1,数据2,数据3,数据4};

	4.2 二维数组数组名:

		4.2.1 查看二维数组所占空间 

		4.2.2 获取二维数组首地址

Chapt6 函数

1. 概述:

	作用:将一段经常使用的代码封装起来,减少重复代码

2. 函数的定义(步骤)

	2.1 返回值类型

	2.2 函数名

	2.3 参数列表

	2.4 函数体语句

	2.5 return表达式
		
	语法:
	返回值类型 函数名 参数列表
	{
		函数体语句
		return 表达式
	}

	int add(int num,int num2)
	{
		int sum = num + num2;
		return sum;
	}

3. 函数的调用

	语法:函数名(参数)

4. 函数的常见样式

	 无参无返、有参无返、无参有返、有参有返

5. 函数的声明

	作用: 告诉编译器函数名称以及如何调用函数,函数的实际主体可以单独定义【当函数的定义在主函数后面进行时

如果没有函数的声明编译器可能会因为找不到函数而出现报错】

	【!!函数的声明可以多次,但函数的定义只能有一次】

6. 函数的分文件编写

	作用: 让代码的结构更清晰

	步骤:  1. 创建后缀名为.h的头文件

			2. 创建后缀名为.cpp的源文件
	
			3. 在头文件中写函数声明
	
			4. 在源文件中写函数的定义

Chapt7 指针

1. 指针的基本概念

	指针的作用:可以通过指针直接访问内存

		【内存编号是从0开始记录的,一般用十六进制数字表示】

		【可以利用指针变量保存地址】

2. 指针变量的定义和使用

	指针变量定义语法:数据类型 * 变量名

3. 指针所占内存空间

	在32位系统下,所有类型的指针都是4个字节的空间。在64位系统下,所有类型的指针都是8个字节

4. 空指针和野指针

	4.1 空指针:指针变量指向内存中编号为0的空间

		用途:初始化指针变量

		注意:空指针指向的变量的不可以访问的

	4.2 野指针(创建一个指针变量然后直接指向一个未知的地址):指针变量指向非法的内存空间

【没有申请的未知内存空间,无操作权限】

		注意:在程序中,尽量避免出现野指针

		例子:
			
			int * p = (int *)0x1100;

	【总结】:空指针和野指针都不是我们申请的空间,因此不要访问

5. const修饰指针

	const修饰指针的三种情况:

		1. const修饰指针 ——常量指针    const int* p = &a;   
			
			【常量指针(值不能变但地址可以变,但是可以通过修改地址间接变化其指向的值//应该吧,是根据测

试结果得到的结论,不一定准)

特点:指针的指向可以修改,但是指针指向的值不可以修改(即指针修改指向的地址但是地址内含的值不
能变),经过测试,其实只是只能表示 p = &其他变量,不能使用 * p = 巴拉巴拉,会报错】

		2. const修饰常量 ——指针常量	int* const d = &c;

			【指针常量(值能变但地址不变,无论内部的值怎么变化,指向的地址始终不变//应该吧,是根据测试

结果得到的结论,不一定准)

			特点:指针的指向不可改,指针指向的值可以改(只能表示* d = 其他变量,而d = &balabala会报错)】

		3. const既修饰指针,又修饰常量		const int * const p =&a;

			【特点:指针的指向和指针的值】

6. 指针和数组

	作用:利用指针访问数组元素
	
	int arr[5] = { 1,6,9,12,15 };
	int* p = arr;
	cout << "第一个元素为:" << *p << endl;
	p++;//让指针向后偏移四个字节(即后移一位)
	cout << "第二个元素为:" << *p << endl;
	//也可以使用*(p+1),测试结果显示,也是指向下一位的指针[!思考:p++和*(p+1)的关系]
	cout << "第三个元素为:" << *(p+1) << endl;
	//回到上一位使用p--

7. 指针和函数

	作用:利用指针作函数参数,可以修改实参的值

	//实现两个数字进行交换
	void swap01(int a,int b) {
		int temp = a;
		a = b;
		b = temp;	//值传递
	}
	void swap02(int *p, int *p2) {
		int temp = *p;
		*p = *p2;
		*p2 = temp;	//地址传递
	}
	int main() {
		//值传递【不改变实参】
		int a = 10;
		int b = 20;
		swap01(a, b);
		//2. 地址传递【会改变实参】
		swap02(&a, &b);

		system("pause");
	}

8. 指针、数组、函数

	案例描述:封装一个函数,利用冒泡排序,实现对整型数组的升序要求
			  例如数组:int arr[10] = {4,3,6,9,1,2,10,8,7,5};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IRUIRUI__

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值