20161224C++阶段班02_C to C++_03引用/指针/引用传参和返回值
2017-01-11 17:19
375 查看
引用/指针
1:指针的缺陷是把其他数据类型改为了指针类型,引用最大的优势是使我们的状态得以保存。引用可以看成一个阉割版的指针!2:引用加上&符号,使用引用的时候不能像指针那样赋值为nullptr,引用必须要指向一个变量。引用就是变量的别名,他是没有独立空间的!引用但凡确定之后,他的值是无法修改的。之后对引用的任何操作都是作用与引用原来的变量上。
3:指针拥有独立的空间,空间里面存储的指向的地址,指向某一个变量,指针这种是弱关联,弱关联(指向的变量可以修改),引用是强关联,他是绑定了的,无法修改(无法把这个别名给另一变量)!
eg: int val = 100; int num = 20; int &refval = val; refval = num;//正确的,相当于给val 赋值! &refval = num;;//这个语句是错误的!右边为int,左边为地址,而求地址无法被赋值,只有地址里面的存储空间可以被赋值。 &refval = &num//也是错误的,左操作数必须为左值(可修改)。
对refval的任何操作都作用于val上,可以使用引用传递参数
void Swap(int &lhs, int &rhs) { int temp = lhs; lhs = rhs; rhs = temp; }这个函数可以实现两个整形数的交换,而且没有想指针那样,类型被修改了。
引用两边类型必须要一样!不可以 char &refval = val;//(val为整形)。
const int &refval = val;//这个是错误的(老师说的,但我编译可以通过,但是只能通过val来修改内存中的值,refval不能拿来修改值)! //const引用指向的是const类型,const类型的数必须只能用const的引用(常量引用)。 const int *pval = &val;//pval值无法修改,const是左结合(优先和左边的结合),左边是什么就是什么不能变!是指针就是地址不能变。 int const *pval = &val;//值无法修改 int *const pval = &val;//地址无法修改 val的值无法再修改!
按引用传递/引用作为返回值:
1:Swap(val,num);//看起来传了一个变量进去,实际上还是相当于地址,但函数里面使用还是想使用变量一样的使用引用,里面可以进行各种各样的操作!相当于把自己传递进去了!平时都是使用指针这样操作,但引用更方便理解!引用的主要意义在于参数的传递!2:如果想通过引用来传递参数,当你不希望函数里面修改引用的值,可以在传递的参数前面加const,这样参数就不能在这个函数里面修改,但在原来的作用域还是可以被修改的。
void Swap(const int &lhs, const int &rhs) { int temp = lhs; lhs = rhs;//这里和下面一排编译就不可以通过(error C3892: “lhs”: 不能给常量赋值) rhs = temp;// }
3:函数返回值也可以是引用!
int array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 }; int &Index(int index) { return array[index]; } int main() { Index(0) = 100; std::cout << array[0]; return 0; }
4:引用无法完全代替指针,因为引用无法指向堆空间!也永远不要那指针来取其引用(用的时候还是要加*),这样难度会提升,而且无意义!
5:引用后面必须是一个变量,不能int &val = 100;//他会在常量区分配一个空间,但毫无意义!最好不要这样用!!
6:auto:C++里面全新的概念,他会自动推导所需的类型!这种自动推导容易出问题。
相关文章推荐
- 20161224C++阶段班02_C to C++_03引用/指针/引用传参和返回值
- 20161224C++阶段班02_C to C++_03引用/指针/引用传参和返回值
- 20161224C++阶段班02_C to C++_03引用/指针/引用传参和返回值
- 20161224C++阶段班02_C to C++_03引用/指针/引用传参和返回值
- 20161224C++阶段班02_C to C++_03引用/指针/引用传参和返回值
- 20161224C++阶段班02_C to C++_03引用/指针/引用传参和返回值
- 20161224C++阶段班02_C to C++_03引用/指针/引用传参和返回值
- 20161224C++阶段班02_C to C++_03引用/指针/引用传参和返回值
- 我的C++成长之路(-) 学习阶段 -03 指针与引用
- 20161220C++阶段班02_C to C++
- 20161220C++阶段班02_C to C++_01bool/头文件/域作用符/new/delete/重载
- 20161220C++阶段班02_C to C++
- 20161220C++阶段班02_C to C++
- 20161220C++阶段班02_C to C++_01bool/头文件/域作用符/new/delete/重载
- C++内存分配、函数调用(值传递、指针传递、引用传递)、返回值问题
- 20161220C++阶段班02_C to C++_01bool/头文件/域作用符/new/delete/重载
- 20161220C++阶段班02_C to C++_01bool/头文件/域作用符/new/delete/重载
- 20161220C++阶段班02_C to C++
- C++指针与引用(一):函数传参,是该传对象,还是传指针,抑或是引用
- 【从C到C++学习笔记】引用/const引用/引用传递/引用作为函数返回值/引用和指针的区别