C語言 關於值傳遞和位址傳遞

2021-06-04 20:03:08 字數 942 閱讀 1726

初學者在學習c語言時候乙個極容易迷惑的地方就在函式的「值傳遞」和「位址傳遞」了,出現這個迷惑的原因有些教材沒有把記憶體圖畫出來,只是簡單的舉了幾個例子,結果初學者按照例子寫寫**倒是能執行出來,但始終沒明白到底是怎麼回事,下面我通過例子和畫圖來相信說明裡面的細節問題。在開始之前有乙個前提,你一定要粗略的看過函式這一章節,不管你是從什麼教材上看過的,總之我下面的內容預設你已經對函式了解一些了。

1. 值傳遞。

比如:自己自定義乙個函式如下:

void swap(int a, int b)

假設在main函式中的呼叫該函式,如下:

如圖所示,實際引數x和y在傳入函式之前還複製了裡面的內容,並把內容交給乙個臨時的記憶體,然後在內部執行交換操作後,只是臨時記憶體a和b做了交換,可見值傳遞只是傳遞了實參中的值,在函式內部也無法修改外部的實際引數。

2.位址傳遞

我們同樣用交換函式來說明問題。

void swap(int *a, int *b)

假設在main函式中的呼叫該函式,如下:

如上圖所示,在傳遞引數的時候,把x和y的位址傳給了函式swap,其實位址值理論上也複製了一次,傳給函式swap的是位址的乙個副本,不過這並不影響*a,因為temp = *a就是將a位址中的數即0x0030裡面放著的10賦值給temp變數,於是temp裡面存入了10,*a = *b就是將b位址中存放的20放入a位址中,這是原理的x值發生了變化,由原來的10變成了20,最後一句*b = temp是將temp中的值10放到b存放的位址所在記憶體中,即y中,於是y就變成了10。

C語言 值傳遞 位址傳遞

1.值傳遞 void exchg1 int x,int y main 呼叫exchg1 a,b 有乙個隱含的操作就是int x a int y b 然後函式內部把形參x和y的值對換。所以a和b的值各自不變。2.位址傳遞 void exchg2 int px,int py main 同樣的,呼叫exc...

C語言值傳遞和位址傳遞詳解

目錄 我們舉乙個例子 寫乙個函式找出兩個整數中的最大值。include get max函式 int get max int x,int y int main 執行結果是 max 20 我們來分析一下這個函式呼叫過程 num1,num2作為實參傳入get max 函式,形參x,y被例項化 分配記憶體單...

C 值傳遞和位址傳遞

在c 呼叫函式時,會存在值傳遞和位址傳遞,也叫 傳引用和傳值 正好用到這方面內容,因此做個總結,加深一下理解,如果有不到位或者不準確的地方,請小夥伴們多指教。1 位址傳遞時,形參和實參是同乙個變數,即使用相同的記憶體空間,二者有相同的位址。而傳值時二者位址不同 2 位址傳遞時,由於沒有新建變數,所以...