首頁 後端開發 Golang Go指標類型的參數傳遞機制

Go指標類型的參數傳遞機制

Apr 13, 2024 am 09:00 AM
指針 參數

Go 指標類型參數傳遞有兩種方式:值傳遞:函數取得指標副本,對副本的變更不影響原始指標。引用傳遞:函數獲得對原始指標的引用,對引用的變更影響原始指標。

Go指標類型的參數傳遞機制

Go 指標類型參數傳遞機制

#在Go 中,指標型別參數以兩種不同的方式傳遞給函數:值傳遞和引用傳遞。

值傳遞

如果將指標值作為值傳遞給函數,則函數將獲得該指標的副本。對該副本所做的任何更改都不會影響原始指標。

程式碼範例:

package main

import "fmt"

func changeValue(ptr *int) {
    *ptr = 10
}

func main() {
    ptr := new(int)
    *ptr = 5
    fmt.Println(*ptr) // 输出: 5

    changeValue(ptr)
    fmt.Println(*ptr) // 输出: 5
}
登入後複製

引用傳遞

#如果將指標位址作為值傳遞給函數,則函數將獲得對原始指標的引用。對該引用所做的任何更改都會影響原始指標。

程式碼範例:

package main

import "fmt"

func changePointer(ptr **int) {
    *ptr = new(int)
    **ptr = 10
}

func main() {
    ptr := new(int)
    *ptr = 5
    fmt.Println(*ptr) // 输出: 5

    changePointer(&ptr)
    fmt.Println(*ptr) // 输出: 10
}
登入後複製

實戰案例

在以下實戰案例中,我們使用值傳遞和引用傳遞來實作一個簡單的鍊錶。

使用值傳遞實作鍊錶:

type Node struct {
    value int
    next *Node
}

func createList(values []int) *Node {
    head := &Node{value: values[0]}
    current := head

    for _, v := range values[1:] {
        next := &Node{value: v}
        current.next = next
        current = next
    }

    return head
}

func printList(head *Node) {
    for current := head; current != nil; current = current.next {
        fmt.Printf("%d ", current.value)
    }
    fmt.Println()
}

func main() {
    values := []int{1, 2, 3, 4, 5}
    head := createList(values)
    printList(head) // 输出: 1 2 3 4 5
}
登入後複製

使用參考傳遞實作鍊錶:

type Node struct {
    value int
    next **Node
}

func createList(values []int) *Node {
    head := &Node{value: values[0]}
    current := head

    for _, v := range values[1:] {
        next := &Node{value: v}
        *current.next = next
        current = next
    }

    return head
}

func printList(head *Node) {
    for current := head; current != nil; current = *current.next {
        fmt.Printf("%d ", current.value)
    }
    fmt.Println()
}

func main() {
    values := []int{1, 2, 3, 4, 5}
    head := createList(values)
    printList(head) // 输出: 1 2 3 4 5
}
登入後複製

在第一個範例中,我們使用值傳遞來建立鍊錶。在第二個範例中,我們使用參考傳遞來建立鍊錶。執行結果都是相同的,但使用參考傳遞時,我們可以在函數中修改鍊錶的順序。

以上是Go指標類型的參數傳遞機制的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1659
14
CakePHP 教程
1416
52
Laravel 教程
1310
25
PHP教程
1258
29
C# 教程
1233
24
泛型函數在Golang中如何處理指標和引用型別? 泛型函數在Golang中如何處理指標和引用型別? Apr 16, 2024 pm 04:06 PM

泛型函數在Go中處理指標型別時,會收到原始變數的引用,允許修改變數值。引用類型則在傳遞時會被複製,使函數無法修改原始變數值。實戰案例包括使用泛型函數比較字串或數字切片。

C++ 函式參數型別安全檢查 C++ 函式參數型別安全檢查 Apr 19, 2024 pm 12:00 PM

C++參數類型安全檢查透過編譯時檢查、執行時間檢查和靜態斷言確保函數只接受預期類型的值,防止意外行為和程式崩潰:編譯時類型檢查:編譯器檢查類型相容性。運行時類型檢查:使用dynamic_cast檢查類型相容性,不符則拋出異常。靜態斷言:在編譯時對型別條件進行斷言。

i9-12900H參數評測大全 i9-12900H參數評測大全 Feb 23, 2024 am 09:25 AM

i9-12900H是14核心的處理器,使用的架構和工藝都是全新的,線程也很高,整體的工作都是很優秀的,一些參數都有提升特別的全面,是可以給用戶們帶來極佳體驗的。 i9-12900H參數評測大全評測:1、i9-12900H是14核心的處理器,採用了q1架構以及24576kb的製程工藝,提升到了20個執行緒。 2.最大的CPU頻率是1.80!5.00ghz,整體主要取決於工作的負載。 3.相比較價位來說還是特別合適的,性價比很不錯,對於一些需要正常使用的伙伴來說非常的合適。 i9-12900H參數評測大全性能跑分

開源模型首勝GPT-4!競技場最新戰報引熱議,Karpathy:這是我唯二信任的榜單 開源模型首勝GPT-4!競技場最新戰報引熱議,Karpathy:這是我唯二信任的榜單 Apr 10, 2024 pm 03:16 PM

能打得過GPT-4的開源模型出現了!大模型競技場最新戰報:1040億參數開源模型CommandR+攀升至第6位,與GPT-4-0314打成平手,超過了GPT-4-0613。圖片這也是第一個在大模型競技場上擊敗GPT-4的開放權重模型。大模型競技場,可是大神Karpathy口中唯二信任的測試基準之一。圖片CommandR+來自AI獨角獸Cohere。這家大模型新創公司的共同創辦人兼CEO,正是Transformer最年輕作者AidanGomez(簡稱割麥子)。圖片這份戰報一出,又掀起了一波大模型社

進階Golang指針型方法,提升程式設計技巧 進階Golang指針型方法,提升程式設計技巧 Apr 07, 2024 pm 06:42 PM

在Go語言中可以使用指標類型方法,該方法可讓您定義指標類型的函數,以便修改指向的值,而無需在方法簽章中明確傳遞指標。這提供了程式碼簡潔性和效率,因為不需要複製值傳遞。指標型別方法的語法是:typeTypeName*Type\nfunc(t*TypeName)MethodName()。要使用指針類型方法,需要建立一個指向類型實例的指針,然後使用該指針呼叫方法。指標類型方法的好處包括:程式碼簡潔性、效率和可修改性。需要注意的是,指標類型方法只能用於指標類型,且使用時需要小心,因為指向的結構體值可能會被意外

如何使用 C++ 引用和指標傳參? 如何使用 C++ 引用和指標傳參? Apr 12, 2024 pm 10:21 PM

C++中引用和指標都是傳遞函式參數的方法,但有差別。引用是變數的別名,修改引用會修改原始變量,而指標儲存變數的位址,修改指標值不會修改原始變數。在選擇使用引用還是指標時,需要考慮是否需要修改原始變數、是否需要傳遞空值和效能考量等因素。

深入理解C語言中的const 深入理解C語言中的const Feb 18, 2024 pm 12:56 PM

C中const的詳解及程式碼範例在C語言中,const關鍵字用來定義常數,表示該變數的值在程式執行過程中不能被修改。 const關鍵字可以用來修飾變數、函數參數、函數傳回值。本文將對C語言中const關鍵字的使用進行詳細解析,並提供具體的程式碼範例。 const修飾變數當const用來修飾變數時,表示變數為唯讀變量,一旦賦值就無法再修改。例如:constint

C++ 函式中引用參數和指標參數的高階用法 C++ 函式中引用參數和指標參數的高階用法 Apr 21, 2024 am 09:39 AM

C++函數中的引用參數(本質為變數別名,修改引用修改原始變數)和指標參數(儲存原始變數的記憶體位址,透過解引用指標修改變數)在傳遞和修改變數時有著不同的用法。引用參數常用於修改原始變數(尤其是大型結構體),傳遞給建構子或賦值運算子時避免複製開銷。指標參數則用於靈活指向記憶體位置,實現動態資料結構或傳遞空指標表示可選參數。

See all articles