按值呼叫(call by value)和透過引用呼叫(call by reference)的區別

許多程式語言都使用函式。函式是執行特定任務的一組語句。主程式碼可以分為幾個函式並呼叫它們。呼叫函式有兩種方法,如按值呼叫和按引用呼叫。在按值呼叫方法中,變數的副本被傳遞到函式中。如果函式的值發生更改,則不會更改原始值。在引用呼叫中,函式內部變數的更改反映原始值。按值呼叫和按引用呼叫的關鍵區別在於,在按值呼叫中,變數的副本傳遞給函式,而在按引用呼叫中,變數的地址傳遞給函式。本文討論了按值呼叫和按引用調...

關鍵區別——按值調用與按引用調用

許多編程語言都使用函數。函數是執行特定任務的一組語句。主代碼可以分為幾個函數並調用它們。調用函數有兩種方法,如按值調用和按引用調用。在按值調用方法中,變量的副本被傳遞到函數中。如果函數的值發生更改,則不會更改原始值。在引用調用中,函數內部變量的更改反映原始值。按值調用和按引用調用的關鍵區別在於,在按值調用中,變量的副本傳遞給函數,而在按引用調用中,變量的地址傳遞給函數。本文討論了按值調用和按引用調用的區別。

目錄

1. 概述和主要區別
2. 什麼是按價值調用
3. 什麼是參照調用
4. 值調用和引用調用的相似性
5. 並列比較-以表格形式按值調用與按引用調用
6. 摘要

什麼是按值調用(call by value)?

在按值調用中,變量的副本傳遞給函數。函數可以更改複製的值,但不會更改原始值。通過交換兩個數字的程序可以很容易地理解這個概念。參考下面用代碼塊環境編寫的C程序。

按值調用(call by value)和通過引用調用(call by reference)的區別

圖01:交換兩個數字的程序

根據下面給出的程序,變量“a”的值為20,變量“b”的值為30。調用swap(a,b)函數時,將這兩個值傳遞給swap函數。在swap函數中,“a”被複制到“x”中,“b”被複制到“y”中。現在,'x'的值是20,'y'的值是30。使用temp變量交換兩個值。當在交換函數中打印“x”和“y”的值時,輸出將為“x”提供30,為“y”提供20。交換函數執行完畢後,控件返回主函數。在main函數中打印“a”和“b”的值時,結果將是原始值。a的20分,b的30分。使用交換函數所做的更改不會反映在主程序中。

按值調用(call by value)和通過引用調用(call by reference)的區別

圖02:交換程序的輸出

swap函數中的“x”和“y”具有交換的值,即30和20,但這些值不能在主程序中使用。即使“x”和“y”有交換的值,它們也是交換函數的局部變量,主函數無法訪問它們。為了避免這個問題,可以使用引用調用。

什麼是通過引用調用(call by reference)?

在這個方法中,變量的地址被髮送到函數。參考下面用代碼塊環境編寫的C程序。

按值調用(call by value)和通過引用調用(call by reference)的區別

圖03:使用指針交換兩個數字

根據下面的給定示例,“a”的值為20,“b”的值為30。程序員可以使用swap(&a,&b)函數發送“a”和“b”的地址,而不是傳遞“a”和“b”的副本。

按值調用(call by value)和通過引用調用(call by reference)的區別

圖04:使用指針的交換程序的輸出

在交換中,函數應該使用指針,因為地址是傳遞的,這些地址應該由指針保存。在函數內部,“a”的地址被複制到“x”,地址“b”被複制到“y”。使用temp變量,“x”和“y”值交換。在這個引用方法的調用中,swap函數內部的更改反映在主程序中。在main中打印'a'和'b'的值將得到交換的值。現在“a”的輸出是30,“b”的輸出是20。當函數獲取變量的地址時,函數內部所做的更改會影響原始值。

什麼是值調用與引用調用的相似性(the similarity between call by value and call by reference)?

  • 這兩個方法用於調用函數/方法。

按值調用(call by value)和通過引用調用(call by reference)的區別

按值調用與按引用調用
在按值調用中,變量的副本被傳遞到函數中,因此在函數內部所做的更改不會修改原始值。 在按引用調用中,變量的地址傳遞給函數,因此對函數內部變量所做的更改將修改原始值。
價值修正
在按值調用時,原始值不變。 在按引用調用中,原始值正在更改。

總結 - 按值調用(call by value) vs. 通過引用調用(call by reference)

按值調用和按引用調用是調用函數的方法。按值調用和按引用調用的區別在於,在按值調用中,變量的副本傳遞給函數,而在按引用調用中,變量的地址傳遞給函數。使用按值調用或按引用調用取決於要執行的任務。

下載按值調用vs按引用調用的pdf版本

你可以下載這篇文章的PDF版本,並按照引文說明離線使用。請在這裡下載PDF版本的按值調用和按引用調用的區別

引用
  • 發表於 2020-10-20 00:32
  • 閱讀 ( 48 )
  • 分類:科技

你可能感興趣的文章

外面的(out)和參考c#(ref in c#)的區別

...數。它們是有值引數、輸出引數和參考引數。值引數用於按值將引數傳遞到方法中。引用引數用於透過引用將引數傳遞給方法。輸出引數用於將結果從方法返回。在C#中,out關鍵字用於輸出引數,ref關鍵字用於引用引數。C中out和...

  • 發佈於 2020-10-18 20:42
  • 閲讀 ( 52 )

系統呼叫(system call)和圖書館呼叫(library call)的區別

關鍵區別-系統呼叫與庫呼叫 系統呼叫和庫呼叫與計算機的作業系統有關。計算機可以在兩種模式下執行,即使用者模式和核心模式。系統呼叫和庫呼叫的關鍵區別在於,系統呼叫是核心提供的進入核心模式訪問硬體資源的函...

  • 發佈於 2020-10-20 00:18
  • 閲讀 ( 49 )

名詞(noun)和形容詞(adjective)的區別

...nning是動詞run的名詞形式。影片通話中的單詞calling是動詞呼叫的名詞形式,dancer是動詞舞蹈的名詞形式。因此,可以理解名詞可以從動詞形式中創造出來。 什麼是形容詞(an adjective)? 另一方面,形容詞限定了它在下面給出的句...

  • 發佈於 2020-10-23 12:08
  • 閲讀 ( 43 )

阿賈克斯(ajax)和jquery公司(jquery)的區別

...碼簡化為一行程式碼。jQuery封裝並簡化了非常複雜的Ajax呼叫和DOM。jQuery的部分功能實現了一個高階介面來處理AJAX請求。jQuery檢測使用者的操作並相應地修改web頁面上的元素。jQuery在前端動態地執行所有工作。因此,無論何時需...

  • 發佈於 2020-10-27 15:54
  • 閲讀 ( 46 )

圍繞可調整大小的物件的八個白色正方形叫什麼?

... has changed or not. Those of us who learned the tech many years ago still refer to them as “grabber handles”, but “selection handles” or “resize handles” sounds much more dignified. I do not like just “handles” because the word is too overloaded and thus ambiguous. Do not use it unl...

  • 發佈於 2021-04-08 07:37
  • 閲讀 ( 40 )

如何將googlecall小部件新增到任何網頁

...需要客戶知道您的真實號碼。 Call Widget使用googlevoice首先呼叫客戶在Widget表單中鍵入的號碼。連線後,系統會提示使用者連線到您配置的小部件要呼叫的號碼。谷歌語音連線這兩個數字,你正在說話的瞬間。 新增googlecall小部件...

  • 發佈於 2021-04-12 21:40
  • 閲讀 ( 60 )

t-mobile美國取消1900個工作崗位,還有更多

...爾、堪薩斯州萊內克斯、科羅拉多州桑頓和雷蒙德的七家呼叫中心設施,俄勒岡州。不過,實際上,受影響的員工人數將超過這一數字——公司總共裁員3300人,其餘17個呼叫中心新增1400人。 不過,這還不是全部:哼...

  • 發佈於 2021-04-21 17:39
  • 閲讀 ( 41 )

call bliss根據位置阻止不需要的呼叫,無需越獄

iOS:iOS6中的“請勿打擾”功能非常出色,但它缺少的一個關鍵功能是基於位置的阻塞。CallBliss是一款應用程式,它將此功能與其他一些方便的功能結合起來。Call Bliss透過利用現有的請勿打擾功能,無需越獄即可工作。當您開始使...

  • 發佈於 2021-05-25 03:27
  • 閲讀 ( 31 )

bdc公司(bdc)和呼叫事務(call transaction)的區別

BDC與Â 呼叫事務 BDC或批處理資料通訊和呼叫事務是介面技術的兩種方式。在BDC和call事務之間可能會遇到許多不同之處。 在比較兩者時,批處理資料通訊是最古老的介面技術。BDC介面最重要的方面是非同步處理。這意味著它用於...

  • 發佈於 2021-06-23 07:06
  • 閲讀 ( 43 )

呼叫(call)和放(put)的區別

看漲期權vs看跌期權 看漲期權和看跌期權是證券交易所交易中使用的不同期權。這兩個術語主要用於商品和股票交易。看漲期權和看跌期權都是買賣雙方之間的協議。如果你想在證券交易所進行交易,瞭解這兩種期權是如何運...

  • 發佈於 2021-06-23 12:52
  • 閲讀 ( 37 )
落yu離殤
落yu離殤

0 篇文章

作家榜

  1. admin 0 文章
  2. 孫小欽 0 文章
  3. JVhby0 0 文章
  4. fvpvzrr 0 文章
  5. 0sus8kksc 0 文章
  6. zsfn1903 0 文章
  7. w91395898 0 文章
  8. SuperQueen123 0 文章