首页 > 其他分享 > 变量的引用

变量的引用

时间:2023-03-13 10:14:15浏览次数:50  
标签:cout int 引用 数组 变量 指针

原文链接:https://blog.csdn.net/ChaoFeiLi/article/details/103593740

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

注意点:

  1. 变量的引用在声明时必须初始化
  2. 变量的引用作为变量的别名,因此他们指向同一个内存空间,所以变量的引用不占用存储空间
  3. 引用在初始化后不能被重新定义为声明为另一个变量的别名,也就是说引用一旦被定义,不可更改引

#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

相关文章

  • 工程化引用数据的几个类型总结
    基本数据类型有string,number,Boolean,undefined,null和es6新增的symbol和bingint。引用数据类型有数组、对象、字符串。在es6新增的还有set、map、weakset、weakmap。symbol创......
  • 交换两个变量
    这个作业属于哪个课程https://edu.cnblogs.com/campus/sdscfz/SF3/这个作业要求在哪里https://edu.cnblogs.com/campus/sdscfz/SF3/homework/12939这个作业的......
  • 变量概念
    变量概念-变量提供一个具名的、可供程序员操作的存储空间-变量的数据类型决定了所占的内存空间大小、存储方式、存储范围、参参与的运算-对象是一块能存储数据,并具有......
  • [Linux环境变成]Linux设置子进程环境变量
    posix_spawn通过一个指定的可执行文件创建子进程,并设置其启动参数和环境变量。其原型如下:#include<spawn.h>//pid:子进程的进程号//path:创建子进程的可执行文件路径......
  • java8新特性-引用流-sorted
    例子:List<User>users=newArrayList<>();users.add(newUser("张三",30));users.add(newUser("李四",34));users.add(newUser("王五",20));......
  • 整环上的多变量多项式不是 PID 的证明
    整环上的多变量多项式不是PID.分析与证明:设(R,+,·)是一个整环,需证若n≥2,则R[x1,...,xn]不是PID.为方便起见,使用多重变量简记符号x=x1, ...,xn,以及多......
  • java8新特性-引用流-max,min
    例子:List<User>users=newArrayList<>();users.add(newUser("张三",30));users.add(newUser("李四",34));users.add(newUser("王五",20));......
  • Nginx基础 - 13模块与变量
      一、Nginx常用模块Nginx模块分为Nginx官方模块以及Nginx第三方模块Nginx编译选项模块作用ngx_http_core_module包含一些核心的http参数配置......
  • 【java基础】java的强引用、弱引用、软引用、虚引用
    前言Java执行GC(垃圾回收)判断对象是否存活有两种方式,分别是引用计数法和引用链法(可达性分析法)。引用计数:Java堆中给每个对象都有一个引用计数器,每当某个对象在其它地......
  • c++11标准右值引用, 移动语义和完美转发
    0.序言学习自C++RvalueReferencesExplained(thbecker.net)1.引入1.1拷贝间接资源如果一个类的成员变量有指针,例如classMyClass{public:T*element;}......