引用

一 引用的定义

引用可以看作一个已定义变量的别名
引用的语法:Type& name = var;

// 引用的定义
int a = 10;
int& b = a;

cout << "a:" << a << " a的地址: " << &a << endl;
cout << "b:" << b << " b的地址: " << &b << endl;

image

二 引用的意义

  • 引用作为其它变量的别名而存在,因此在一些场合可以代替指针
  • 引用相对于指针来说具有更好的可读性和实用性
void swap(int &a, int &b)
{
  int temp = a;
  a = b;
  b = temp;
}

void swap(int *a, int *b)
{
  int temp = *a;
  *a = *b;
  *b = temp;
}

三 引用的本质

引用在C++中的内部实现是一个常指针, 因此引用所占用的空间大 小与指针相同
Type& name ---- Type* const name

int a = 0;
int &b = a;  // int* const b= &a;  b的指向不能变

当实参传给形参引用的时候,只不过是c++编译器帮我们程序员手工取了一个实参地 址,传给了形参引用(常量指针)

void func(int &var)
{ 
  var = 15; 
}

void func(int *const var)
{
  *var = 15; 
}

int main() 
{
  int value= 10;
  func(value); 
}

四 指针引用

//指针引用
int x = 666; 
int *p = &x; 
int* &q = p; //定义指针变量的引用 
printf("*p: %d *q: %d\n", *p, *q);
#include <iostream>

using namespace std;

void boyHome1(int** meipo)
{
    static int boy = 23;
    *meipo = &boy;
}

void boyHome2(int*& meipo)
{
    static int boy = 23;
    meipo = &boy;
}

int main()
{
    int* meipo = NULL;
    boyHome1(&meipo);
    boyHome2(meipo);

    return 0;
}

五 常引用

语法: const Type& name = var;
const 引用让变量拥有只读属性

//1.用变量初始化常引用
int a = 10;
const int &b = a;

//2.用字面量初始化常量引用
const int c1 = 10; 
const int &c2 = 10; //这个是在 C++中,编译器会对这样的定义的引用分 配内存,这算是一个特例 
int c3 = c2; 
//c2 = 100;//不能修改

const int& e 相当于 const int* const e
普通引用 相当于 int *const e1
当使用常量(字面量)对const引用进行初始化时,C++编译器会为常量值分配空间, 并将引用名作为这段空间的别名
使用字面量对const引用初始化后,将生成一个只读变量

posted @ 2022-04-18 19:48  荒年、  阅读(79)  评论(0编辑  收藏  举报