天天看點

C語言引用一、引用的概念二、引用的聲明三、例子四、總結

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語言引用一、引用的概念二、引用的聲明三、例子四、總結

可以看到,操作引用c和操作原變量a能達到同樣的效果。

既然如此,引用的使用有何必要呢?那就要涉及到其原理。實際上,引用不是定義一個新的變量或對象,是以記憶體不會為引用開辟新的空間存儲這個引用。

舉個栗子

C語言引用一、引用的概念二、引用的聲明三、例子四、總結

利用引用傳參實作數值交換:

#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. 引用本身是目标變量或對象的别名,對引用的操作本質上就是對目标變量或對象的操作。是以能使用引用時盡量使用引用而非指針。