变量的引用

 变量的引用

定义:变量的引用是变量的别名

注意点:

  1. 变量的引用在声明时必须初始化
  2. 变量的引用作为变量的别名,因此他们指向同一个内存空间,所以变量的引用不占用存储空间
  3. 引用在初始化后不能被重新定义为声明为另一个变量的别名,也就是说引用一旦被定义,不可更改引用
#include<iostream>
using namespace std;
int main(){
	int a = 10;
	int&b = a;
	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;

4.不能建立引用的数组

int &p[12],由于[]的优先级大于&,所以p[12]表示一个数组,&p[12]表示一个引用的数组。

小结一下:可以建立数组的引用,指针的引用,但是反过来不可以(引用的数组和引用的指针,这是错误的)

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;
}

发布了114 篇原创文章 · 获赞 28 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/ChaoFeiLi/article/details/103593740
今日推荐