C/C++小课之引用

关于引用,讲一个同学问的题目。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>

using std::endl; //域限定符
using std::cout; //域限定符

int &f(int& a, int b = 20)
//定义函数,为了规范,应该在main前边写函数声明,main后定义函数
{
//a是main函数中j的引用
a = a * b; //j = j * b
return a;
}

int main()
{

int j = 10;
int &m = f(j); //函数f返回引用a,即j的引用,所以m是j的引用
int *p = &m; //p指向j
cout << j << endl; //200
m = 20; //m是j的引用,j = 20
cout << j << endl; //20
f(j, 5);
cout << j << endl; //100
*p = 300;
cout << j << endl; //300
}

知识点

引用

引用分为左值引用和右值引用。

左值引用是某个变量的别名,作用类似于指针,提高效率。

右值引用是绑定到右值上的引用,只能绑定到即将销毁的对象上。

域限定符

命名空间是为了解决全局命名空间污染问题。

通过限定符可以使用对应命名空间内的对象(变量、函数、类型、类等)。

函数默认参数

默认参数又叫做缺省参数。如何理解?

  • 默认

    小明:小红,你在干嘛?

    小明:小红,你刚才在干嘛?

  • 缺省

    可以缺少、省略。

所有默认参数都必须出现在无默认参数的最右边。

也就是说实参从左向右给形参赋值,默认参数从右向左给形参赋值。

函数位置

函数应该写在代码的哪里?

如果使用C语言,比较好的方式是将函数声明和函数定义分开放,即在main函数前声明函数,在main函数后定义函数。

如果使用C++,最好面向对象,使用头文件和源文件。

相关名词

谈到这个,相关的名词有两个:

  • new出来的内存空间是在中的

  • (堆)栈

    如果在main函数中定义一个int变量,这个变量就存储在里。

在学数据结构时,会学到栈和堆,它们是两种数据结构。

栈和函数

栈有一个应用就是处理函数的嵌套,比较典型的函数嵌套就是递归。

比如上边代码中的main运行到f函数时,先要保存现在main函数的状态(变量、代码执行到的位置等),将其压栈(PUSH);然后再进入f函数,栈顶即为f函数的内容,f函数执行完后,出栈(POP);然后继续执行main函数。

在调试时就可以看到函数调用栈。


作者:@臭咸鱼

本文为作者原创,转载请注明出处:https://chouxianyu.github.io

欢迎讨论和交流!