溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

C++中創(chuàng)建引用的方法

發(fā)布時(shí)間:2020-07-10 11:20:56 來(lái)源:億速云 閱讀:414 作者:清晨 欄目:開(kāi)發(fā)技術(shù)

這篇文章將為大家詳細(xì)講解有關(guān)C++中創(chuàng)建引用的方法,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

引用變量是一個(gè)別名,也就是說(shuō),它是某個(gè)已存在變量的另一個(gè)名字。一旦把引用初始化為某個(gè)變量,就可以使用該引用名稱或變量名稱來(lái)指向變量。

C++ 引用 vs 指針

引用很容易與指針混淆,它們之間有三個(gè)主要的不同:

  • 不存在空引用。引用必須連接到一塊合法的內(nèi)存。
  • 一旦引用被初始化為一個(gè)對(duì)象,就不能被指向到另一個(gè)對(duì)象。指針可以在任何時(shí)候指向到另一個(gè)對(duì)象。
  • 引用必須在創(chuàng)建時(shí)被初始化。指針可以在任何時(shí)間被初始化。
     

C++ 中創(chuàng)建引用

試想變量名稱是變量附屬在內(nèi)存位置中的標(biāo)簽,您可以把引用當(dāng)成是變量附屬在內(nèi)存位置中的第二個(gè)標(biāo)簽。因此,您可以通過(guò)原始變量名稱或引用來(lái)訪問(wèn)變量的內(nèi)容。例如:

int i = 17;

我們可以為 i 聲明引用變量,如下所示:

int& r = i;
double& s = d;

在這些聲明中,& 讀作引用。因此,第一個(gè)聲明可以讀作 "r 是一個(gè)初始化為 i 的整型引用",第二個(gè)聲明可以讀作 "s 是一個(gè)初始化為 d 的 double 型引用"。下面的實(shí)例使用了 int 和 double 引用:

#include <iostream>
 
using namespace std;
 
int main ()
{
  // 聲明簡(jiǎn)單的變量
  int  i;
  double d;
 
  // 聲明引用變量
  int&  r = i;
  double& s = d;
  
  i = 5;
  cout << "Value of i : " << i << endl;
  cout << "Value of i reference : " << r << endl;
 
  d = 11.7;
  cout << "Value of d : " << d << endl;
  cout << "Value of d reference : " << s << endl;
  
  return 0;
}

當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)果:

Value of i : 5
Value of i reference : 5
Value of d : 11.7
Value of d reference : 11.7

引用通常用于函數(shù)參數(shù)列表和函數(shù)返回值。下面列出了 C++ 程序員必須清楚的兩個(gè)與 C++ 引用相關(guān)的重要概念:

把引用作為參數(shù) 

C++ 支持把引用作為參數(shù)傳給函數(shù),這比傳一般的參數(shù)更安全。

#include <iostream>
using namespace std;
 
// 函數(shù)聲明
void swap(int& x, int& y);
 
int main ()
{
  // 局部變量聲明
  int a = 100;
  int b = 200;
 
  cout << "交換前,a 的值:" << a << endl;
  cout << "交換前,b 的值:" << b << endl;
 
  /* 調(diào)用函數(shù)來(lái)交換值 */
  swap(a, b);
 
  cout << "交換后,a 的值:" << a << endl;
  cout << "交換后,b 的值:" << b << endl;
 
  return 0;
}
 
// 函數(shù)定義
void swap(int& x, int& y)
{
  int temp;
  temp = x; /* 保存地址 x 的值 */
  x = y;  /* 把 y 賦值給 x */
  y = temp; /* 把 x 賦值給 y */
 
  return;
}

當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)果:

交換前,a 的值: 100
交換前,b 的值: 200
交換后,a 的值: 200
交換后,b 的值: 100

把引用作為返回值 

可以從 C++ 函數(shù)中返回引用,就像返回其他數(shù)據(jù)類型一樣。通過(guò)使用引用來(lái)替代指針,會(huì)使 C++ 程序更容易閱讀和維護(hù)。C++ 函數(shù)可以返回一個(gè)引用,方式與返回一個(gè)指針類似。

當(dāng)函數(shù)返回一個(gè)引用時(shí),則返回一個(gè)指向返回值的隱式指針。這樣,函數(shù)就可以放在賦值語(yǔ)句的左邊。例如,請(qǐng)看下面這個(gè)簡(jiǎn)單的程序:

#include <iostream>
 
using namespace std;
 
double vals[] = {10.1, 12.6, 33.1, 24.1, 50.0};
 
double& setValues( int i )
{
 return vals[i];  // 返回第 i 個(gè)元素的引用
}
 
// 要調(diào)用上面定義函數(shù)的主函數(shù)
int main ()
{
 
  cout << "改變前的值" << endl;
  for ( int i = 0; i < 5; i++ )
  {
    cout << "vals[" << i << "] = ";
    cout << vals[i] << endl;
  }
 
  setValues(1) = 20.23; // 改變第 2 個(gè)元素
  setValues(3) = 70.8; // 改變第 4 個(gè)元素
 
  cout << "改變后的值" << endl;
  for ( int i = 0; i < 5; i++ )
  {
    cout << "vals[" << i << "] = ";
    cout << vals[i] << endl;
  }
  return 0;
}

當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)果:

改變前的值
vals[0] = 10.1
vals[1] = 12.6
vals[2] = 33.1
vals[3] = 24.1
vals[4] = 50
改變后的值
vals[0] = 10.1
vals[1] = 20.23
vals[2] = 33.1
vals[3] = 70.8
vals[4] = 50

當(dāng)返回一個(gè)引用時(shí),要注意被引用的對(duì)象不能超出作用域。所以返回一個(gè)對(duì)局部變量的引用是不合法的,但是,可以返回一個(gè)對(duì)靜態(tài)變量的引用。

int& func() {
  int q;
  //! return q; // 在編譯時(shí)發(fā)生錯(cuò)誤
  static int x;
  return x;   // 安全,x 在函數(shù)作用域外依然是有效的
}

關(guān)于C++中創(chuàng)建引用的方法就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI