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