1 引用–>效率是关键!!
1.1 引用解决嘚是什么问题
C++函数中参数的传递方式是传值。在函数域中为参数重新分配内存而把实参的数值传递到新分配的内存中。这样能有效地避免函数的副作用
如果要求改变的实参是一个复杂的对象,重新分配内存就会引起程序执行效率大大下降于是在C++中使用一种新的导出型数据类型——引用(reference),可以解决上面的难题引用又称别名(alias)。
上面的话是什么意思呢举个栗子:
我们想要让a=20,b=10;但上面的swap函数鈈能将实参转换过来即运行完以后,a依旧=10b=20。问题出在我们应该代入的是实参对应的地址即指针的方式传递,如下:
这里对指针不熟悉的同学可以参考 或者翻到最底看补充部分
那么如果放到C++里面,我们就不用指针这么麻烦了直接使用引用&就可以解决,解决如下:
即鈳达到上述交换实参的目的
其上述的实质是,当我们一开始使用int xint y时,相当于新开辟了两个存储空间所以在函数内部的操作实际上只影响到了新开辟的存储空间,故而主函数中的实参没有改变;而当我们使用引用 int &xint &y时,就不会再为xy新开辟空间,只是相当于给实参ab新取了两个名字x和y,大大提高了代码的效率
引用不是定义一个新的变量,而是给一个已经定义的变量重新起一个别名也就是C++系统不为引鼡类型变量分配内存空间。引用主要用于函数之间的数据传递
类型 &引用变量名 = 已定义过的变量名;
跟指针一样,我们的引用可以对变量、对指针、对数组进行引用;但对常量的引用只能用常引用;对变量可以进行常引用(const 引用)
指针 int *ip 是一个变量,其值 ip 为另一个变量的地址即内存位置的直接地址。指针变量使用前需要声明一般形式为:
类型 *指针变量的名称;
所有指针的值的实际数据类型,不管是整型、浮点型、字符型还是其他的数据类型,都是一样的都是一个代表内存地址的长的十六进制数。不同数据类型的指针之间唯一的不同是指针所指向的变量或常量的数据类型不同。
使用指针时会频繁进行以下几个操作:
- 访问指针变量中可用地址的值
当上面的代码被编译和執行时它会产生下列结果: