本篇是学习VC驿站的《实用C++》教程时的超简化同步笔记,详细内容可参见VC驿站原帖
是在学校C++课程之外重新系统地学习一遍C++,所以很基础很基础的部分不会记录
代码块渲染有误,目前不知道怎么解决,#include< iostream>总是消失,你们自己加上就好了QAQ
如果觉得网站字体太小,可以在右下方的按钮中点击+放大哦√(比如我就觉得这个网站的字体很小)
希望对你和我都能有所帮助 : )
复习天数:1 2 4 7 15 30
函数
几个面白い小点
- main函数:主入口函数
- 实参类型:常量、变量、表达式
- 调用函数时实参应尽量与形参的类型一致,或可进行相应的转化,如果转化不了则编译器会报错
- 函数内部的return返回值类型要与函数本身定义时候的返回值类型一致,即使不一致也是可以相互转化的,最终以函数定义时候的返回值类型为主进行转化,若转化不了则编译期间报错
函数调用的几种方式
普通语句调用
eg. int sum = add (2, 3);
作为表达式调用
eg. cout << “sum = “ << add(2, 3) << endl;
作为函数参数调用
eg. print_msg(add(2, 3));
嵌套调用
函数a中调用函数b
注意:函数不可以嵌套定义(在函数a中定义函数b),编译器会报错。在其它类似js的脚本语言中可以这样,但在C/C++中不可以。(新标准中可能可以?有需要时再百度,目前来讲不会这样用就是了)
递归调用
举个栗子:求第十个人的岁数,已知第十个人比第九个人大两岁,第九个人比第八个人大两岁……第一个人今年十岁。
c++1
2
3
4
5
6
7int get_age(int who)
{
if (who > 1)
return get_age(who - 1) + 2;
else if (who == 1)
return 10;
}其中who代表第几个人。如果是求第一个人的岁数,那么他是十岁;如果问的是后面的人的岁数,那么他的岁数等于前一个人的岁数再+2。
(忽然就感觉递归很符合我们的思考逻辑,超简单
局部变量和全局变量
局部变量举例
一般局部变量的作用域就在它所在的一对花括号内。
函数的形参作用域也在其函数的整个作用域内,也是局部变量;
1 | int x = 2, y = 5; |
这里面的变量 k 就是一个局部变量,他的作用域也只局限于 if 的 {} 花括号内。
多文件共同访问一个全局变量
- 在其中一个C/Cpp文件中定义并初始化全局变量,例如:
int sum = 0; - 在C/Cpp文件都能访问到的一个h头文件中声明该全局变量为支持多文件访问的:
extern int sum; //此时只是声明,所以不需要初始化 - 在其他C/Cpp文件中 #include 这个头文件之后,就可以直接使用这个全局变量 sum 了。
备注:不能在 h 文件中直接定义这个全局变量 int sum = 0; 这样的话如果有多个C/Cpp文件 include 包含这个头文件的时候,就会提示 sum 重复定义了。所以一定要在 C/Cpp文件中定义该全局变量,之后在 h 头文件中声明该全局变量才行。
static 静态类型变量
1 | int sum = 0; |
结论: static 静态类型局部变量只初始化一次,之后的调用都不进行初始化
分析:有那种 在局部范围内定义了全局变量 的意思
数组
关于定义
定义时,中括号内必须是常量/常量表达式,
不能是个变量或者一个不确定的值,不然编译阶段就直接报错了。因为定义好了之后,系统马上就根据这个个数来分配空间了。如果是个变量,系统就不知道要分配多少空间。
数组名的命名规则与变量的命名规则相同,由数字、字母、下划线组成,且数字不能放到开头。
如果想动态地创建数组,用的方法是:int *student = new int[num];
以后会讲。
关于元素访问
下标可以是常量也可以是变量,注意不要越界。
一维数组初始化
初始化方式
定义时,全部元素初始化
int stu_no[5] = {101, 102, 103, 104, 105};
定义时,部分元素初始化,后面未初始化元素默认赋初值0
int stu_no[5] = {101, 102};
定义时,全部元素初始化,不指定数组长度
int stu_no[] = {101, 102, 103, 104, 105};
定义后,对单个元素初始化,未初始化的元素的值随机
不管是定义的时候指定长度还是不指定长度,总结起来就一个规则,定义的时候让系统知道数组的长度就可以了,也就是定义即确定大小。
一维数组代码举例
一整形数组中有10个数,分别是:5,8,9,0,2,1,4,7,6,3;
求出数组中最大和最小的数并进行输出。
1 | int max_num = 0, min_num = 0; |
仔细看的话,这块代码是有问题的。比如,如果数组里面的0是2,那求出来的最小值是多少呢?计算机会求出来,是0,不是1。
所以赋的初值应该来源于数组里面的元素,修改后的代码如下:
1 | int num[] = {5, 8, 9, 0, 2, 1, 4, 7, 6, 3}; |
其实是很简单的代码啦,主要是逗号表达式没用过,这里是个简单的使用例子,所以列了出来。