最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解C++ 引用

 更新時間:2020年07月08日 15:32:22   作者:菜鳥教程  
這篇文章主要介紹了C++ 引用的相關(guān)資料,文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下

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

C++ 引用 vs 指針

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

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

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

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

int i = 17;

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

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

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

#include <iostream>
 
using namespace std;
 
int main ()
{
  // 聲明簡單的變量
  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í)行時,它會產(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++ 程序員必須清楚的兩個與 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ù)來交換值 */
  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í)行時,它會產(chǎn)生下列結(jié)果:

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

把引用作為返回值 

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

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

#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 個元素的引用
}
 
// 要調(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 個元素
  setValues(3) = 70.8; // 改變第 4 個元素
 
  cout << "改變后的值" << endl;
  for ( int i = 0; i < 5; i++ )
  {
    cout << "vals[" << i << "] = ";
    cout << vals[i] << endl;
  }
  return 0;
}

當(dāng)上面的代碼被編譯和執(zhí)行時,它會產(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)返回一個引用時,要注意被引用的對象不能超出作用域。所以返回一個對局部變量的引用是不合法的,但是,可以返回一個對靜態(tài)變量的引用。

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

以上就是詳解C++ 引用的詳細(xì)內(nèi)容,更多關(guān)于C++ 引用的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C++探索構(gòu)造函數(shù)私有化會產(chǎn)生什么結(jié)果

    C++探索構(gòu)造函數(shù)私有化會產(chǎn)生什么結(jié)果

    C++的構(gòu)造函數(shù)的作?:初始化類對象的數(shù)據(jù)成員。即類的對象被創(chuàng)建的時候,編譯系統(tǒng)對該對象分配內(nèi)存空間,并?動調(diào)?構(gòu)造函數(shù),完成類成員的初始化。構(gòu)造函數(shù)的特點:以類名作為函數(shù)名,?返回類型
    2022-05-05
  • C++?const與constexpr區(qū)別小結(jié)

    C++?const與constexpr區(qū)別小結(jié)

    C++11標(biāo)準(zhǔn)中,const用于為修飾的變量添加只讀屬性,而constexpr關(guān)鍵字則用于指明其后是一個常量,本文主要介紹了C++?const與constexpr區(qū)別小結(jié),感興趣的可以了解一下
    2024-03-03
  • C++詳解實現(xiàn)Stack方法

    C++詳解實現(xiàn)Stack方法

    C++ Stack(堆棧)是一個容器類的改編,為程序員提供了堆棧的全部功能,也就是說實現(xiàn)了一個先進(jìn)后出(FILO)的數(shù)據(jù)結(jié)構(gòu)
    2022-06-06
  • ubunt18.04LTS+vscode+anaconda3下的python+C++調(diào)試方法

    ubunt18.04LTS+vscode+anaconda3下的python+C++調(diào)試方法

    這篇文章主要介紹了ubunt18.04LTS+vscode+anaconda3下的python+C++調(diào)試方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • 你必須知道的C語言預(yù)處理的問題詳解

    你必須知道的C語言預(yù)處理的問題詳解

    本篇文章介紹了,你必須知道的C語言預(yù)處理的問題。需要的朋友參考下
    2013-05-05
  • C語言 scanf的工作原理詳解

    C語言 scanf的工作原理詳解

    這篇文章主要為大家介紹了C語言 scanf的工作原理,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • Cocos2d-x學(xué)習(xí)筆記之開發(fā)環(huán)境搭建

    Cocos2d-x學(xué)習(xí)筆記之開發(fā)環(huán)境搭建

    這篇文章主要介紹了Cocos2d-x學(xué)習(xí)筆記之開發(fā)環(huán)境搭建,本文使用Visual Studio作為開發(fā)IDE,是不同于其它教程的,需要的朋友可以參考下
    2014-09-09
  • 一文教你快速了解C語言中的作用域和常量

    一文教你快速了解C語言中的作用域和常量

    作用域(scope)是程序設(shè)計概念,通常來說一段程序代碼中所用到的名字并不總是有效/可用,下面這篇文章主要給大家介紹了關(guān)于如何快速了解C語言中的作用域和常量的相關(guān)資料,需要的朋友可以參考下
    2023-06-06
  • C++ CryptoPP使用AES實現(xiàn)加解密詳解

    C++ CryptoPP使用AES實現(xiàn)加解密詳解

    Crypto++ (CryptoPP) 是一個用于密碼學(xué)和加密的 C++ 庫,提供了大量的密碼學(xué)算法和功能,這篇文章主要為大家介紹了C++ CryptoPP如何使用AES實現(xiàn)加解密,需要的可以參考下
    2023-11-11
  • 基于C語言利用哈夫曼樹實現(xiàn)文件壓縮的問題

    基于C語言利用哈夫曼樹實現(xiàn)文件壓縮的問題

    哈夫曼編碼是一種編碼方式,又稱“霍夫曼編碼”,其是可變字長的編碼(VCL)的一種,這篇文章主要介紹了基于C語言利用哈夫曼樹實現(xiàn)文件壓縮,需要的朋友可以參考下
    2021-08-08

最新評論

新余市| 泾川县| 金华市| 蓬溪县| 庆城县| 余干县| 凤台县| 石家庄市| 新源县| 新龙县| 军事| 余干县| 景谷| 宁陵县| 武隆县| 农安县| 邻水| 西峡县| 分宜县| 昌乐县| 剑河县| 保山市| 称多县| 青海省| 浦东新区| 京山县| 望奎县| 藁城市| 广南县| 清水河县| 海淀区| 应城市| 堆龙德庆县| 阿拉善盟| 环江| 上思县| 永清县| 武城县| 特克斯县| 长葛市| 丰都县|