先来说说何为引用,及就是引用的定义。我看到的一些书上给出的定义是:变量名,本身是一段内存的引用,
即别名(alias)。此处引入的引用,是为己有变量起一个别名。下面是代码定义:
int a;
int &ra = a;
其中变量ra是int型变量的引用,是对int型变量a的声明,引用的变量不能独立存在,必须初始化,并且与原类型保持一致,且不分配内存空间。
声明关系,一经声明,不可再次被更改。可以对引用类型的变量,再次进行引用。多次引用的结果就是,某一变量具有多个别名,多个别名之间的关系是相互平行的关系,不像指针一样有一级指针,二级指针等。引用不是一种独立的数据类型。对引用只有声明,没有定义。辨别引用于其他, “&” 前有数据类型时,是引用,例如:int & ra; double & b; 等。其他则是取地址符,或按位与。引用的目的就是取代指针传参。C++引入引用后,只要是可以用引用来解决的问题,都避免使用指针。引用的使用可以简单的分为以下几种:
单独对变量进行引用作为函数的参数引用的本质就是指针,不过是加了const的指针。C++对指针做了包装,使得引用有指针的良好性质。以下是在使用引用是需要注意的几点:
可以对指针进行引用,但不能定义引用的指针int a = 10;
int *p = &a;
int *& rp = p;
int &* prp = &rp;
2.指针有一级指针、二级指针等,但引用无二级引用
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int *p;
int * * ptp= &p;
int a;
int & ra = a;
int & rb = a;
int & rc = rb;
int && rrc = rc;
return 0;
}
3.数组中可以全部存放为地址(及就是指针数组),但是不可存放引用
在C++中const 定义的变量称为常变量。以变量的形式,常量的作用,用作常量。常用来替代#define 宏常量。
1.接收函数返回值
2.接收表达式的值
之前介绍过,引用在声明的时候不分配空间。那么我们怎样才能证实在C++编译器中到底有没有给引用变量分配内存空间呢?
首先会这么想:
#include "iostream"
using namespace std;
void foo(int& ra, char& rb) {
cout << sizeof(ra) << " " << sizeof(rb) << endl;
}
int main(int argc, char const* argv[]) {
int a; char b;
foo(a, b);
return 0;
}
但仔细想想,如果这么做的话,那岂不是在计算引用的大小的时候就调用函数了,则在调用函数的时候,就开始给形参分配变量了,所以,这样并不能证实C++编译器有没有给引用变量分配内存空间。既然这样,那我们可以试着把引用变量单独列出来,使其不和具体的对象发生关系,如下所示:
#include "iostream"
using namespace std;
struct TypeP
{
char* p;
};
struct TypeC
{
char c;
};
struct TypeR
{
char& r;
};
int main(int argc, char const* argv[])
{
cout << "sizeof(TypeP):" << sizeof(TypeP) << " sizeof(TypeC)" << sizeof(TypeC) << " sizeof(TypeR)" << sizeof(TypeR) << endl;
return 0;
}
这样以来,就可以初步断定引用是经过包装后的指针。但是,引用在使用的时候必须要初始化,在之前的学习过程中,const的常量在声明变量的时候需要初始化。那这样一来,引用则就是const声明的指针变量。也就是说:int &p;等同于int * const p;
相关知识
初学花艺者必学的插花技巧
字符串 (C++/CX)
常见C/C++ XML解析器比较
盆景初学十三个技巧
c++学习
c++第二次实验
C++中重载、重写(覆盖)的区别实例分析
初学养花的一些建议
C++: 水仙花数
引用 引用 如何自制水培花卉营养液?
网址: 小白初学C++的引用 https://m.huajiangbk.com/newsview651633.html
上一篇: 夏季栽种花草植物,得提前' |
下一篇: 太湖县花亭湖:持续开展生物多样性 |