详解C++引用

C/C++
542
0
0
2022-05-09

什么是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.若返回静态变量或者全局变量,函数返回可以做其他引用的初始值,而且既能当做左值,也能当右值。(因为静态变量或者全局变量,程序运行期一直存在,从程序开始到程序结束)。