详解C++引用

什么是C++引用

c++引用是一个已存在变量的别名。

c++引用的意义

1.在某些场合c++引用可以替代指针。
2.相对指针来说,引用能提高代码可读性。
示例1 引用作为函数参数:

//两数交换,利用指针
void swap1(int *a,int *b)
{
  int temp = *a;
  *a = *b;
  *b = temp;
}
//两数交换,利用引用(引用作为参数)
void swap2(int &a,int &b)
{
  int temp = a;
  a = b;
  b =temp;
}
int main() {
  int c =10;
  int d = 100;
  swap1(&c,&d);
  cout<<c<<","<<d<<endl;
  swap2(c,d);
  cout<<c<<","<<d<<endl;
  return 0;
}

输出结果

100,10
10,100

示例2 引用作为函数返回值:

#include <iostream>
using namespace std;

int nums[5] = {1,2,3,4,5};

//利用引用作为函数返回值
int& SetNum1(int i)
{
  int &temp = nums[i];
  return temp;
}

//利用指针作为函数返回值
int* SetNum2(int i)
{
  int *temp = &nums[i];
  return temp;
}

int main() {
  SetNum1(1) = 10*1;
  SetNum1(4) = 10*4;
  for (int i =0 ; i<5; i++)
   cout<<nums[i]<<endl;
  *SetNum2(1) = 100 *1;
  *SetNum2(4) = 100 *4;
  for (int i =0 ; i<5; i++)
    cout<<nums[i]<<endl;
}

输出:

1
10
3
4
40
1
100
3
4
400

以上示例可以看出,实现同样功能,从可读性来说,明显引用更胜一筹。

引用占用内存空间吗

#include <iostream>
using namespace std;

int main() {
 int a=10;
 int& b=a;
 cout<<"引用b占用的内存空间为:"<< sizeof(b)<<endl;
 char c = 'a';
 char &d = c;
 cout<<"引用c占用的内存空间为:"<< sizeof(c)<<endl;
 return 0;
}

输出:

引用b占用的内存空间为:4
引用c占用的内存空间为:1

引用的本质

C++引用本质其实是一个指针常量(这就不难解释为什么int型引用会占用4个字节的内存空间,char 型引用占用一个字节。因为int指针占用四个字节内存,char型指针占用一个字节)。

注意事项

当函数返回引用时:
1.若返回栈变量,函数返回不能当作其他引用的初始值,不能当左值。(因为函数调用结束后,函数内的局部变量被销毁,函数返回的引用(指针常量)会成为“无所指”的引用(指针)。
2.若返回静态变量或者全局变量,函数返回可以做其他引用的初始值,而且既能当做左值,也能当右值。(因为静态变量或者全局变量,程序运行期一直存在,从程序开始到程序结束)。

C++
本作品采用《CC 协议》,转载必须注明作者和本文链接
拉姆塞
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!