C++參數(shù)傳遞(值傳遞,引用傳遞)

值傳遞

  • 值傳遞是指在調(diào)用函數(shù)時將實際參數(shù)復(fù)制一份傳遞到函數(shù)中,這樣在函數(shù)中如果對參數(shù)進行修改,將不會影響到實際參數(shù)。
  • 在函數(shù)結(jié)束返回后,形參被丟棄釋放,實參的內(nèi)容不會被改變

數(shù)據(jù)值傳遞和地址值傳遞

  • 數(shù)據(jù)值傳遞

    //C語言的數(shù)據(jù)值傳遞
    #include<stdio.h> 
    
    int fun(int a)
    {
      a = 3; //對a進行改變 
      printf("fun's a is:%d\n",a);
      return 1;
    }
    
    int main()
    {
      int a = 1;
      printf("main's original a is:%d\n",a);
      fun(a); //調(diào)用fun(int ) 
      printf("main's a is:%d",a);
      return 0;
    }
    
  • 地址值傳遞

    //C語言的地址值傳遞(實例一)
    #include<stdio.h> 
    
    int fun(int* p)
    {
      *p = 3; //對p指向的數(shù)據(jù)(main's a)進行了改變 
      return 1;
    }
    
    int main()
    {
      int a = 1;
      int* p = &a; //初始化指針并指向a
      printf("main's original a is:%d\n",a);
      fun(p); //調(diào)用fun(int* ) 
      printf("main's a is:%d",a);
      return 0;
    }
    
//C語言的地址值傳遞(更揭示值傳遞實質(zhì))(實例二)
#include<stdio.h> 

int fun(int* p)
{ 
  p++; //對傳過來的地址值進行更改 
  printf("fun's p is:%d\n",p);
  return 1;
}

int main()
{
  int a = 1;
  int* p = &a; //初始化指針并指向a
  printf("main's original p is:%d\n",p);
  fun(p); //調(diào)用fun(int* ) 
  printf("main's p is:%d",p);
  return 0;
}

地址值傳遞總結(jié):

  1. 第一個實例常用;第二個不常用,但更加揭示值傳遞的實質(zhì)。

  2. 通過地址值傳遞可以實現(xiàn)被調(diào)用的函數(shù)中的數(shù)據(jù)變更影響到全局(實例一),不同函數(shù)可以共同維護和使用同一內(nèi)存塊兒的數(shù)據(jù)。

  3. 地址值傳遞實質(zhì)是值傳遞,不同于數(shù)據(jù)值傳遞的是地址值復(fù)制到被調(diào)用的函數(shù)中后通常不加改變和參與運算,而是直接取用其指向的數(shù)據(jù),來修改和運算。(取用方式:*p)

引用傳遞

在C++中,函數(shù)參數(shù)的傳遞方式有引用傳遞。所謂引用傳遞是指在調(diào)用函數(shù)時自動將實際參數(shù)的地址傳遞到函數(shù)中,并作為局部變量在堆棧中開辟內(nèi)存空間,被調(diào)函數(shù)對形參的任何操作都被處理成間接尋址,即通過堆棧中存放的地址訪問主調(diào)函數(shù)中的實參變量。那么在函數(shù)中對參數(shù)所進行的修改,將影響到實際參數(shù)。

//C++引用傳遞
#include<iostream>

using namespace std;

int fun(int& b)//參數(shù)定義為一個整型引用 
{
    b = 88; //修改形參b的值 
    cout << "fun's b is:" << b << endl;
}

int main()
{
    int a = 1;
    cout << "main's original a is:" << a << endl;
    fun(a); //調(diào)用fun(int& ) 
    cout << "main's a is:" << a << endl;
    return 0;
 }

辨析

  • 值傳遞是直接傳遞實際參數(shù)的值到形參,相當(dāng)于copy, 實參和形參分別占用不同的相同大小的存儲單元,對形參的操作并不影響實參
  • 引用傳遞是傳遞實際參數(shù)的地址值到形參,形參作為局部變量在堆棧中開辟了內(nèi)存空間,接收實參的地址值存放,被調(diào)函數(shù)對形參的所有操作都被處理為間接尋址,即通過堆棧中存放的地址訪問主調(diào)函數(shù)中的實參變量,此時對形參的所有操作即是對實參的操作

本文借鑒/推薦參考

值傳遞 引用傳遞(傳地址,傳引用)的區(qū)別 ------無限

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在C語言中,五種基本數(shù)據(jù)類型存儲空間長度的排列順序是: A)char B)char=int<=float C)ch...
    夏天再來閱讀 4,081評論 0 2
  • 第1章 第一個C程序第2章 C語言基礎(chǔ)第3章 變量和數(shù)據(jù)類型第4章 順序結(jié)構(gòu)程序設(shè)計第5章 條件結(jié)構(gòu)程序設(shè)計第6章...
    小獅子365閱讀 10,887評論 3 71
  • 1、c語言的函數(shù)有以下特點: (1)才源程序由函數(shù)組成,一個主函數(shù)main()+若干其他函數(shù) C程序中的函數(shù)類似文...
    滕王閣序閱讀 1,526評論 0 6
  • 1)程序結(jié)構(gòu)是三種: 順序結(jié)構(gòu) 、選擇結(jié)構(gòu)(分支結(jié)構(gòu))、循環(huán)結(jié)構(gòu)。 2)讀程序都要從main()入口, 然后從最上...
    杵臼涼薄yo閱讀 2,421評論 0 7
  • 指針是C語言中廣泛使用的一種數(shù)據(jù)類型。 運用指針編程是C語言最主要的風(fēng)格之一。利用指針變量可以表示各種數(shù)據(jù)結(jié)構(gòu); ...
    朱森閱讀 3,619評論 3 44

友情鏈接更多精彩內(nèi)容