go語言 函式引數傳遞詳解

2022-07-21 02:27:14 字數 1728 閱讀 5168

引數傳遞是指在程式的傳遞過程中,實際引數就會將引數值傳遞給相應的形式引數,然後在函式中實現對資料處理和返回的過程。比較常見的引數傳遞有:值傳遞,按位址傳遞引數或者按陣列傳遞引數。

1、常規傳遞

使用普通變數作為函式引數的時候,在傳遞引數時只是對變數值得拷貝,即將實參的值複製給變參,當函式對變參進行處理時,並不會影響原來實參的值。

例如:package main

import (

"fmt"

)func swap(a int, b int)

func main()

輸出結果:5 10

傳遞給swap的是x

,y的值得拷貝,函式對拷貝的值做了交換,但卻沒有改變

x,y的值。

2、指標傳遞

函式的變數不僅可以使用普通變數,還可以使用指標變數,使用指標變數作為函式的引數時,在進行引數傳遞時將是乙個位址看唄,即將實參的記憶體位址複製給變參,這時對變參的修改也將會影響到實參的值。

我們還是用上面的的例子,稍作修改如下:

package main

import (

"fmt"

)func swap(a *int, b *int)

func main()

輸出結果:10 5

3、陣列元素作為函式引數

使用陣列元素作為函式引數時,其使用方法和普通變數相同,即是乙個「值拷貝」。

例:package main

import (

"fmt"

)func function(a int)

func main()

function(s[2])

fmt.print(s[2])

}輸出結果:3

可以看到將陣列元素s[2]

的值作為函式的實參,不管對形參做什麼操作,實參都沒有改變。

4、陣列名作為函式引數

和其他語言不同的是,go

語言在將陣列名作為函式引數的時候,引數傳遞即是對陣列的複製。在形參中對陣列元素的修改都不會影響到陣列元素原來的值。這個和上面的類似,就不貼**了,有興趣的自行編寫**測試下吧。

5、slice作為函式引數

在使用slice

作為函式引數時,進行引數傳遞將是乙個位址拷貝,即將底層陣列的記憶體位址複製給引數

slice

。這時,對slice

元素的操作就是對底層陣列元素的操作。例如:

package main

import (

"fmt"

)func function(s1 int)

func main()

var s int = a[:]

function(s)

fmt.println(s[0])

}執行結果:101

6、函式作為引數

在go語言中,函式也作為一種資料型別,所以函式也可以作為函式的引數來使用。例如:

package main

import (

"fmt"

)func function(a, b int, sum func(int, int) int)

func sum(a, b int) int

func main()

執行結果:11

函式sum

作為函式

function

的形參,而變數

f是乙個函式型別,作為

function

()呼叫時的實參。

go語言 函式引數傳遞詳解

引數傳遞是指在程式的傳遞過程中,實際引數就會將引數值傳遞給相應的形式引數,然後在函式中實現對資料處理和返回的過程。比較常見的引數傳遞有 值傳遞,按位址傳遞引數或者按陣列傳遞引數.1 常規傳遞 使用普通變數作為函式引數的時候,在傳遞引數時只是對變數值的拷貝,即將實參的值複製給變參,當函式對變參進行處理...

go語言 函式引數傳遞詳解

引數傳遞是指在程式的傳遞過程中,實際引數就會將引數值傳遞給相應的形式引數,然後在函式中實現對資料處理和返回的過程。比較常見的引數傳遞有 值傳遞,按位址傳遞引數或者按陣列傳遞引數。package main import fmt func main functionvalue s 2 fmt.print...

GO 函式引數傳遞

傳遞是指在呼叫函式時將實際引數 複製 乙份傳遞到函式中,這樣在函式中如果對引數進行修改,將不會影響到實際引數。預設情況下,go 語言使用的是值傳遞,即在呼叫過程中不會影響到實際引數。讓我們看如下例子 func main swap a func swap a 2 int 這裡swap 函式並不能交換m...