引用--变量的别名
来源:互联网 发布:淘宝关键词搜索在哪 编辑:程序博客网 时间:2024/04/28 02:36
1.引用只可以一个变量所赋值,赋值之后不可以再作为另一个变量的引用。
举例:
int a=0;
int b=1;
int &r=a;
r=b; // error
什么可以被引用:真值,指针变量。
for instance:
1. int& r=1;
相当于:
double temp=(double)1; //其实应该也可以是int类型
int& r=temp;
2. int* iptr;
int* & r=iptr; // 表示指针iptr的一个别名为r
int b=8;
r=&b; //ok,经过第二部,r已经成为一个指针,那么这里可以被初始化
什么不可以被引用:数组,NULL。
1. int a[10];
int& r[]=a; // error
2. NULL
引用本身就不是一个实体,不占空间,那么它就不可以是NULL
2.引用传递参数注意问题:多个函数怎么匹配
void fn(int a){};
void fn(int& a){};
void main(){
fn(5); // error 这两个函数怎么匹配呢?
}
3.利用引用“返回”多个值?
实际上:利用引用不是说可以返回多个值,而是把需要改变的值以引用的方式传递过去,在函数内部改变它们之后就相当于返回了多个值。
/*
程序目的是得到一个输入值的平方和立方。
*/
#include<iostream>
using namespace std;
void square_cube(int n,int& square,int& cube);
void main(){
int square;
int cube;
int n;
cin>> n;
square_cube();
cout<<square<<" "<<cube<< endl;
}
void square_cube(int n, int& square, int& cube){
square=n*n;
cube=n*n*n;
}
程序目的是得到一个输入值的平方和立方。
*/
#include<iostream>
using namespace std;
void square_cube(int n,int& square,int& cube);
void main(){
int square;
int cube;
int n;
cin>> n;
square_cube();
cout<<square<<" "<<cube<< endl;
}
void square_cube(int n, int& square, int& cube){
square=n*n;
cube=n*n*n;
}
// 传递square,cube的引用过来,那么在函数square_cube内部改变他们的值得时候,
实际上是改变了main中的square,cube的值,所以在main中输出来的的确是n的平方和立方。
4.用引用返回值四种类型。
#include <iostream>
float temp; //全局变量,驻留在内存的data区
float fn1(float r){
temp = r*r*3.14;
return temp
}
float& fn2(float r){
temp= r*r*3.14;
return temp;
}
int main(){
float a=fn1(5.0); //1
float& b=fn1(5.0); //2
float c=fn2(5.0); //3
float& d=fn2(5.0); //4
}
float temp; //全局变量,驻留在内存的data区
float fn1(float r){
temp = r*r*3.14;
return temp
}
float& fn2(float r){
temp= r*r*3.14;
return temp;
}
int main(){
float a=fn1(5.0); //1
float& b=fn1(5.0); //2
float c=fn2(5.0); //3
float& d=fn2(5.0); //4
}
1. float a=fn1(5.0);
fn1()返回的时候(返回类型为float),data区域的temp的副本赋值给 stack区的临时变量,a=fn1()之后临时变量再赋值给a。
2. float& b=fn1(5.0);
fn1()返回的时候(返回类型为float),data区域的temp的副本赋值给stack区的临时变量,b=fn1()之后,b作为临时变量的一个别名;
危险!因为临时变量会随着fn1()的结束而消失,那么引用b也会变得没有意义,所以着这种做法不合适。
3. float c=fn2(5.0);
fn2返回的时候(返回类型为float&),data区域的temp的副本直接越过临时变量,在c=fn2()之后,直接复制给c。
4. float& d=fn2(5.0);
fn2返回的时候(返回类型为float&),在d=fn2()之后d直接作为temp的一个别名(而不是向前面那么作为临时变量的别名)。
5.利用引用让函数调用作为左值
#include <iostream>
using namespace std;
int n;
int& num(int& n);
void main(){
n=1;
num(n)++; //函数调用作为左值。
}
int& num(int& n){
return n;
}
using namespace std;
int n;
int& num(int& n);
void main(){
n=1;
num(n)++; //函数调用作为左值。
}
int& num(int& n){
return n;
}
- 引用--变量的别名
- 引用(变量的别名)
- 引用、变量的别名,并非指针
- 引用真的是别名吗?
- sql里面如何引用列的别名
- go的变量、常量、类型别名
- 指针和引用对比 理解引用起到别名的作用
- 指针变量的引用
- 变量的引用赋值
- 变量的间接引用
- c++的引用变量
- C++变量的引用
- 体验变量的引用
- jsp 变量的引用
- 指针变量的引用
- 指针变量的引用
- 8.变量的引用
- C++变量的引用
- Android之NDK开发(手把手)
- c# 窗体传值汇总
- osg学习之一:基础
- c++中while和for的优缺点
- Android学习笔记:无厘头的java.io.IOException: Unable to open sync connection
- 引用--变量的别名
- c语言的搞怪程序
- 哈佛大学20条校训
- (译)如何使用cocos2d1.0来给sprite添加Mask(遮罩)
- shell中的trailing newline
- 配置Action---struts2学习笔记
- 黑马程序员——两个变量数值的互换
- new和delete必须成对出现吗?【网上集合贴+个人总结】
- 标准IO库函数的简单介绍(2)