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

C++之值傳遞&指針傳遞&引用傳遞的示例詳解

 更新時間:2022年10月24日 15:04:48   作者:虐心i  
這篇文章主要為大家詳細介紹了C++中值傳遞、指針傳遞和引用傳遞的定義與使用,文中的示例代碼講解詳細,對我們學(xué)習(xí)C++有一定幫助,需要的可以參考一下

1.函數(shù)基礎(chǔ)

一個函數(shù)由以下四部分組成:

  • 返回類型
  • 函數(shù)名
  • 參數(shù)(0個或多個)
  • 函數(shù)體

其中,函數(shù)的參數(shù)叫做形參,函數(shù)執(zhí)行的操作的語句塊叫做函數(shù)體

2.值傳遞

像一個這樣swap函數(shù),調(diào)用的時候,會用實參初始化swap函數(shù)對應(yīng)的形參

void Swap(int a, int b)
{
  int tmp = a;
  a = b;
  b = tmp;
}

在內(nèi)存中會拷貝一份實參的值,但是修改形參的值并不影響實參的值

測試用例

#include <iostream>
 
void Swap(int a, int b)
{
    int tmp = a;
    a = b;
    b = tmp;
}
 
int main()
{
 
    int n = 0;
    int i = 1024;
 
    Swap(n, i);
    std::cout << "n: " << n << "\ni: " << i << std::endl;
 
    // 運行結(jié)果
    // n: 0
    // i: 1024
 
    return 0;
}
int n = 0;
int i = n; // i是n的值的副本
i = 42;

3.指針傳遞

指針的行為和其他非引用類型一樣。當執(zhí)行指針拷貝操作時,拷貝的是指針的值。

拷貝之后,兩個指針是不同的指針。因為指針使我們可以間接地訪問它所指的對象,所以通過指針可以修改它所指對象的值

void SwapPoniter(int *a, int *b)
{
  int tmp = *a;
  *a = *b;
  *b = tmp;
}

測試用例

#include <iostream>
 
void SwapPoniter(int *a, int *b)
{
    int tmp = *a;
    *a = *b;
    *b = tmp; // 修改了指針b指向的對象的值
    b = 0; // 只改變了函數(shù)體中的內(nèi)存拷貝,實參并沒有被修改
}
 
int main()
{
 
    int n = 0;
    int i = 1024;
    int *j = &n;
    int *k = &i;
 
    SwapPoniter(j, k);
    std::cout << "j: " << *j << "\nk: " << *k << std::endl;
 
    // 運行結(jié)果
    // j: 1024
    // k: 0
 
    return 0;
}
int n = 0, i = 1024;
int *p = &n, *q = &i;      // p指向n;q指向i
*p = 1024;                 // n的值被修改;p不變
p = q;                     // p現(xiàn)在指向了i;但是n與i的值都不變

傳遞指針,就是拷貝一個指針,它儲存的值是一樣的,解引用后是指向同一個對象,但是修改指針的值就是修改拷貝對象的值

在C語言中,大多數(shù)程序員都用得指針類型的形參去訪問函數(shù)的外部對象,在C++中,建議使用引用類型的形參代替指針

4.引用傳遞

引用傳遞跟指針傳遞有點類似,使用引用傳參,允許函數(shù)訪問,改變一個或多個實參的值

void SwapQuote(int &a, int &b)
{
  int tmp = a;
  a = b;
  b = tmp;
}

測試用例

#include <iostream>
 
void SwapQuote(int &a, int &b)
{
  int tmp = a;
  a = b;
  b = tmp;
}
 
int main()
{
 
  int n = 0;
  int i = 1024;
  
  SwapQuote(n, i);
  std::cout << "n: " << n << "\ni: " << i << std::endl;
    
  // 運行結(jié)果
  // n: 1024
  // i: 0
 
  return 0;
}

使用引用傳遞可以避免拷貝

拷貝大的類類型對象或者容器對象比較低效,甚至有的類類型(包括IO類型在內(nèi))根本就不支持拷貝操作。當某種類型不支持拷貝操作時,函數(shù)只能通過引用形參訪問該類型的對象。

舉個例子,我們準備編寫一個函數(shù)比較兩個string對象的長度。因為string對象可能會非常長,所以應(yīng)該盡量避免直接拷貝它們,這時使用引用形參是比較明智的選擇。又因為比較長度無須改變string對象的內(nèi)容,所以把形參定義成對常量的引用

當我們只是單純讀取實參,并不打算修改時,盡量使用常量引用

#include <iostream>
 
void testprint(const int &a)
{
  std::cout << "a: " << a << std::endl;
}
 
int main()
{
  int num = 111;
  testprint(num);
    // 輸出結(jié)果 a: 111
 
  return 0;
}

使用引用傳遞返回額外信息

一個函數(shù)只能返回一個值,然而有時函數(shù)需要同時返回多個值,引用形參為我們一次返回多個結(jié)果提供了有效的途徑

舉個例子, 在剛剛的swap函數(shù)增加返回最小值與最大值

void SwapQuote(int &a, int &b, int &mix, int &max)
{
  int tmp = a;
  a = b;
  b = tmp;
  a < b ? mix = a, max = b : max = a, mix = b;
}

這樣我們只需要調(diào)用的時候傳入實參,即可修改實參的值

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

相關(guān)文章

  • C語言 詳細講解邏輯運算符的使用

    C語言 詳細講解邏輯運算符的使用

    在C語言中,邏輯運算符有&&、||、!;&&表示“與”的意思,需要兩端的表達式的值都為true,該式的值才為true。||表示“或”的意思,兩端的表達式的值只要有一端為true,該式的值就為true。!表示“非”的意思,將該式的真值換成相反的真值,即false和true互換
    2022-04-04
  • 用C語言實現(xiàn)計算器功能

    用C語言實現(xiàn)計算器功能

    這篇文章主要為大家詳細介紹了用C語言實現(xiàn)計算器功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • Qt繪制圖表的實現(xiàn)

    Qt繪制圖表的實現(xiàn)

    Qt中提供了強大的2D繪圖系統(tǒng),可以使用同一API實現(xiàn)在屏幕和繪圖設(shè)備上進行繪制,本文就詳細的介紹了Qt繪制坐標圖、柱狀圖、折線圖、餅圖、曲線圖、散點圖等,感興趣的可以了解一下
    2021-05-05
  • C++ Eigen庫計算矩陣特征值及特征向量

    C++ Eigen庫計算矩陣特征值及特征向量

    這篇文章主要為大家詳細介紹了C++ Eigen庫計算矩陣特征值及特征向量,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • C語言大小端模式、判斷大小端、大小端轉(zhuǎn)換方法詳解

    C語言大小端模式、判斷大小端、大小端轉(zhuǎn)換方法詳解

    這篇文章主要介紹了C語言大小端模式、判斷大小端、大小端轉(zhuǎn)換的相關(guān)資料,大端和小端是數(shù)據(jù)在內(nèi)存中的存儲方式,大端模式下高字節(jié)存于低地址,小端模式則相反,大小端問題由數(shù)據(jù)類型多字節(jié)存儲引起,不同選擇形成不同存儲模式,需要的朋友可以參考下
    2024-10-10
  • C++異步操作future和aysnc與function和bind

    C++異步操作future和aysnc與function和bind

    這篇文章主要介紹了C++異步操作future和aysnc與function和bind,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09
  • c++與c中的數(shù)組初始化默認值如何為0

    c++與c中的數(shù)組初始化默認值如何為0

    這篇文章主要介紹了c++與c中的數(shù)組初始化默認值如何為0問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • C++實現(xiàn)推箱子游戲

    C++實現(xiàn)推箱子游戲

    這篇文章主要為大家詳細介紹了C++實現(xiàn)推箱子游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • C++實現(xiàn)詞法分析器

    C++實現(xiàn)詞法分析器

    這篇文章主要為大家詳細介紹了C++實現(xiàn)詞法分析器的相關(guān)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • 使用UDP協(xié)議實現(xiàn)單詞翻譯服務(wù)器

    使用UDP協(xié)議實現(xiàn)單詞翻譯服務(wù)器

    這篇文章主要為大家詳細介紹了如何使用UDP協(xié)議實現(xiàn)英文單詞翻譯服務(wù)器,文中的示例代碼講解詳細,具有一定的學(xué)習(xí)價值,感興趣的小伙伴可以了解下
    2023-08-08

最新評論

巧家县| 宁城县| 扎鲁特旗| 四会市| 汝南县| 平邑县| 安吉县| 石家庄市| 镇安县| 双峰县| 鄂托克前旗| 武宣县| 萝北县| 武功县| 普兰店市| 武威市| 双城市| 贵州省| 泸水县| 井陉县| 巨野县| 合阳县| 汉阴县| 云南省| 枣阳市| 渭南市| 远安县| 黎平县| 延津县| 运城市| 商都县| 大连市| 伊吾县| 阿拉尔市| 永清县| 如皋市| 奉贤区| 安徽省| 苍山县| 阿合奇县| 娄烦县|