C语言引用

  • Post author:
  • Post category:其他

一、引用的概念

引用,是某一个变量或对象的别名,对引用的操作与对其所绑定的变量或对象的操作等价。

二、引用的声明

引用在声明时必须进行初始化,如下声明错误:

int& c;//这是错误的声明(声明必须初始化)

正确的声明:

//定义了一个a的引用(别名)c 
int a=5;
int &b =a;

不能再将已有的引用名作为其他变量或对象的名字或别名:

 int a=5,b=6;
 int& c=a;//定义了一个引用c 
 int& c=b ;//错误,c是a的引用,不能再重复定义

注意:&符号仅且仅在类型后面时表示引用,其他时候表示取地址。

三、例子

#include<stdio.h>
#include<stdlib.h>
int main()
{
    int a=5,b=6;
    int& c=a;//定义了一个引用c 
    c=b;
    printf("a=%d b=%d c=%d\n",a,b,c);
    return 0;
}

执行结果:
在这里插入图片描述
可以看到,操作引用c和操作原变量a能达到同样的效果。

既然如此,引用的使用有何必要呢?那就要涉及到其原理。实际上,引用不是定义一个新的变量或对象,因此内存不会为引用开辟新的空间存储这个引用。

举个栗子
在这里插入图片描述

利用引用传参实现数值交换:

#include<stdio.h>
#include<stdlib.h>
void swap(int & a,int & b){//引用作为函数的参数
    int temp=a;
    a=b;
    b=temp; 
}
int main(){
    int v1=10,v2=20;
    printf("v1=%d,v2=%d\n",v1,v2);//v1=10,v2=20
    swap(v1,v2);
	printf("v1=%d,v2=%d\n",v1,v2);//v1=20,v2=10
    return 0;
}

这样就不会为形参分配内存空间(使用指针作为函数的形参虽然达到的效果和使用引用相当),但当调用函数时仍需要为形参指针变量在内存中分配空间,而引用则不需要这样,故推荐使用引用而非指针作为函数的参数)。

四、总结

1.在引用的使用中,单纯给某个变量起别名意义不大,引用的目的主要用于在函数参数的传递中,解决大块数据或对象的传递效率和空间不如意的问题(例如传递复杂的结构体或类时)。
2. 引用本身是目标变量或对象的别名,对引用的操作本质上就是对目标变量或对象的操作。因此能使用引用时尽量使用引用而非指针。


版权声明:本文为weixin_44205099原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。