原文链接:https://blog.csdn.net/ChaoFeiLi/article/details/103593740
定义:变量的引用是变量的别名
注意点:
- 变量的引用在声明时必须初始化
- 变量的引用作为变量的别名,因此他们指向同一个内存空间,所以变量的引用不占用存储空间
- 引用在初始化后不能被重新定义为声明为另一个变量的别名,也就是说引用一旦被定义,不可更改引
#include<iostream>
using namespace std;
int main(){
int a = 10;
int&b = a;//给a起别名,叫b
cout<<b<<endl;
cout<<"&b:"<<&b<<" "<<"&a:"<<&a<<endl;
int c = 5;
b = c;//这个地方是对引用对象的赋值
cout<<" "<<endl;
cout<<"&b:"<<&b<<" "<<"&c:"<<&c<<endl;
cout<<b<<endl;
//int &b = c;//引用一旦被初始化,不能重新更改, 重定义;多次初始化
system("pause");
return 0;
}
上述代码中b=c是对引用对象的赋值,就是改变的a的值,上面给出了结果;
引用的进一步说明
1.将引用作为函数参数
引用函数参数的初始化发生在函数调用时虚实结合实现的,同时实参传递给形参的是实参的地址
2.不能建立void类型的引用
void &a = 9;此时void类型不占用存储空间,但是“9”占用存储空间,不符合
3.不能建立引用类型的指针变量
int & *p = &a;
无法从“int *”转换为“int **”
参考链接:https://blog.csdn.net/SZU_Crayon/article/details/79208691
/*指针变量的引用*/
int *a; //声明指针变量,a是一个指向int地址
int* &p=a; //正确,指针变量也是变量,p作为a的别名,改变p指向的值等同于对a进行相同处理
int b=8;
p=&b; //此时 p &b a 表示同一地址
/*引用的指针*/
int a;
int& ra=a; //正确
int& *p=&ra; //error依据定义,引用必须是T类型的对象或变量,而此处试图引用地址,即引用的指针。
4.不能建立引用的数组
int &array[12],由于[]的优先级大于&,所以array[12]表示一个数组,&array[12]表示一个引用的数组。
意思是:数组array里面的数据应该全是引用;
首先,引用必须被初始化,而数组并不能被另一个数组初始化或被另一个数组赋值,其次其中的每一个引用,无给实现一下子初始化。
然后,引用它不支持传统意义的复制,它不占用新的空间
再次,他没有意义,它可以用指针数组实现,完全可以代替
再再再次,不好实现,因为编译器不知道应该分多大的内存给引用的数组。
小结一下:可以建立数组的引用,指针的引用,但是反过来不可以(引用的数组和引用的指针,这是错误的)
5.可以建立指针变量的引用
int a = 10;
int *p = &a;
int* &pt = p;//这个地方必须是指针,如果写&a也是错了,&a不是一个指针变量
6.用const修饰引用,则不允许改变引用变量的值
7.用常量或表达式对引用进行初始化,必须用const声明
int a = 10;
const int &p = 5+a;
const int &pt = 5;
系统的处理过程:先生成一个临时变量用来存储表达式或常量的值,然后引用是该临时值变量的别名
8.在引用和变量类型不同时,需要添加const
float f = 3.158;
const int &p = f;
解释:
float f = 3.158;
cout<<"&f:"<<&f<<endl;
const int &p = f;
cout<<"转换之后的"<<endl;
cout<<f<<endl;
cout<<p<<endl;
cout<<"&p:"<<&p<<endl;
cout<<"&f:"<<&f<<endl;
系统处理过程:int temp = f,将float转为int, 然后p是temp的引用,下图中p和f的地址不一样。
在讨论如何看待是什么类型的引用的时候,先确定引用, 在确定类型。
比如:int* &p ,先看引用&p,把引用去掉,类型是int*,所以这是指针变量的引用
int (&p) [12],先看引用&p,把引用去掉,类型是int[12],所以这是数组的引用
#include<iostream>
using namespace std;
int main(){
int a[5] = {1,2,3,4,5};
int (&p)[5] = a;
cout<<"p:"<<p<<" "<<"a:"<<a<<endl;
cout<<"p[0]:"<<p[0]<<endl;
system("pause");
return 0;
}
标签:cout,int,引用,数组,变量,指针 From: https://www.cnblogs.com/ysl99999/p/17210391.html