Part1:C++引用类型
来源:互联网 发布:python 开发环境 编辑:程序博客网 时间:2024/05/29 19:34
前言:大三马上要结束了,假期特意抽出点时间回顾一下C++,发现自己还是有很多似懂非懂的地方。于是就打算写几篇文章,既是对自己的激励,又希望与大家共勉!如果文章中有哪些不对的地方,请各位不吝赐教。谢谢大家支持!
一、基本知识
再多的文字有时也不如一两个例子来的生动,简洁。文中尽量避免空口白话,结合例子希望说明地清楚明白!
*,&是学习C++的人经常碰到的,也是挺让人头疼的事情。(在这里必须郑重感谢MS的VS,纠错功能之强大使得许多人不很明白,却照样用引用和指针)。
引用和指针是有一定的相同之处的,个人理解,两者都涉及地址这个概念,因此在参数传递时也就具有了节省空间的作用。试想一下,一个char ch[10000],传入一个头地址方便呢,还是将整个数组传入方便。
从定义上看,引用类型和指针也是比较类似。
int x=0;//引用类型在声明引用变量时必须同时初始化int &x_cite = x;int *x_pointer = &x;上面定义了引用类型x_cite和指针x_pointer,并对它们进行了初始化。
下面说一下指针类型和引用类型两者的区别。
int x;int y;int &x_cite = x;x_cite = y;int *x_pointer = &x;x_pointer = &y;运行上面代码,VS编译器应该会报错
error C4700: 使用了未初始化的局部变量“y”但是如果删掉"x_cite=y;"这一句,编译器就不会报错了。
int x;int y;int &x_cite = x;int *x_pointer = &x;x_pointer = &y;这是因为引用类型只能指向一个变量。我可以理解为引用类型很专一,对一个人(变量)从一而终;而指针呢,则很花心,总是与不同的人(变量)交往。
二、进阶第一步:函数中的引用类型
新手在解除C++时,常常会被&和*搞混。希望看完下面的东西,可以对你有一点帮助!
首先定义函数,
//传入引用类型void find(int x){x = x + 1;}void find_cite(int &x){x = x + 1;}
主函数
int x=0;int &x_cite=x;//声明引用变量时必须同时定义find(x);std::cout << "未使用引用类型" << std::endl;std::cout << x<<std::endl; //未改变xfind_cite(x_cite);std::cout << "使用引用类型" << std::endl;std::cout << x << std::endl; //改变x
运行结果截图
由上图可见,函数参数使用引用类型(int &x)改变了主函数中定义的整型“int x;”的值。究其原因,引用类型使用了变量x的地址,其操作是&x,即取x的地址,因此在改变x_cite的同时对原来的x也有影响。
进一步说,这里如果使用
find_cite(x);其结果也是相同的!
定义返回引用类型的函数,如下:
int& find_cite(int &x){x = x + 1; return x;}不过这样做的意义通常不大。
三、进阶第二步:类对象的引用
class Node{public:int data = 5;};void fun1(Node nd){nd.data = 10;}void fun2(Node &nd){nd.data = 20;}void fun3(Node* nd){nd->data = 30;}void main(){ Node nd;int num = nd.data;cout << num<< endl;fun1(nd);cout << num << endl;fun2(nd);num = nd.data;cout << num << endl;fun3(&nd);num = nd.data;cout << num << endl;}运行结果截图:
如果定义int &num=nd.data;,就不需要num=nd.data;这一步了!同样可以得到上面的结果。
void main(){ Node nd;int &num = nd.data;cout << num<< endl;fun1(nd);cout << num << endl;fun2(nd);//num = nd.data;cout << num << endl;fun3(&nd);//num = nd.data;cout << num << endl;}
未完待续!
- Part1:C++引用类型
- C++_引用类型
- C#_引用类型
- 一次性搞定定堆、栈、值类型、引用类型(part1)
- 类型信息(part1)
- C++/CLI中的引用类型
- 【引用】C中的类型转换
- C# 值类型与引用类型
- 【C#】值类型和引用类型
- 值类型与引用类型(C#)
- 【C#】—值类型与引用类型
- 【C#】值类型与引用类型
- 【C#】值类型和引用类型
- c++:函数返回引用类型和非引用类型
- C#变量类型(1):引用类型和值类型
- C#变量类型:引用类型和值类型
- C#中数组是引用类型
- C++Primer读书笔记(2)-引用和类型
- PO3641 Pseudoprime numbers判伪素数与快速幂
- android switch语句case expressions must be constant expressions
- Servlet 3.0新特性总结
- openwrt(一) 下载源码编译
- sqlite第三方类库:FMDB使用(转载)
- Part1:C++引用类型
- Android照片墙完整版,完美结合LruCache和DiskLruCache
- 浅谈MD5加密算法中的加盐值(SALT)
- 一个动态调用webservices的类分享给大家 含有 soapheader
- EL表达式
- 笑话:Developer and product manager
- 一些常用到的键弹性域和存其代码组合的表
- 开源框架:SDWebImage
- 数字在排序数组中出现的次数