NO Title!
《数据结构算法与应用》
C++回顾
首先我们编写一个很简单的函数
1 | int abc(int a,int b,int c) |
其中,a,b,c都是函数abc的形参,即形式参数
当我们调用该函数时
1 | z=abc(2,x,y); |
其中的2,x,y便是实参,即实际上进行运算的参数
所以形参与实参的区别在于,形参只是提供了一个类似于模板的作用,真正在程序中进行运算的是实参
其原理是,在调用函数时,将实际参数复制给形式参数,复制过程由形参类型的复制构造函数完成
为此,当函数运行结束时,形参类型的析构函数会释放形式参数,为此形式参数的值不会被复制到相应的实参中,下面代码的结果可以证明这一点
1 | void swap1(int a,int b) |
运行结果
1 | 3 5//swap1的结果 |
swap2会改变number数组中两个值的位置,而swap1不会
因为对于swap2,我们使用了引用参数类型,所以会对实参的数据进行修改,换句话说,函数调用后,实际上的数据也会发生变化
动态分配
操作符new
new操作符作用,用来进行动态存储分配或运行时存储分配,它的值是一个指针,指向分配空间
1 | int* y; |
操作符new分配了一块能够存储一个整数的空间,并将该空间的指针赋给y
二维数组
当二维数组作为函数形参的时候,需要对其第二维大小进行指定
1 | int f(int a[][]){}//不指定第二维作为形式参数时,不可定义 |
如果在定义一个二维数组时,只知道其中一维的大小,可采用如下语法进行分配
1 | char(*c)[5]; |
为一个二维数组分配存储空间
1 | template<class T> |