Go基礎(④指針)

簡單示例

package mainimport "fmt"func main() {var num int = 100var p *int = &num // 指向int類型的指針fmt.Println(*p)   // 解引用,輸出 100*p = 200          // 通過指針修改原變量fmt.Println(num)  // 輸出 200
}

package mainimport "fmt"func main() {a := 10var p *int  // 聲明一個指向int的指針pp = &a      // p存儲a的內存地址(p指向a)fmt.Println("a的值:", a)      // 輸出:a的值:10fmt.Println("a的地址:", &a)   // 輸出:a的地址:0xc00001a0a8(地址值可能不同)fmt.Println("p存儲的地址:", p) // 輸出:p存儲的地址:0xc00001a0a8(和a的地址相同)fmt.Println("p指向的值:", *p)  // 輸出:p指向的值:10(通過指針訪問a的值)// 通過指針修改a的值*p = 20fmt.Println("修改后a的值:", a)  // 輸出:修改后a的值:20
}

函數中使用指針

如果想在函數內部修改外部變量的值,需要傳遞指針:

package mainimport "fmt"// 傳遞指針參數
func addOne(p *int) {*p = *p + 1  // 修改指針指向的變量的值
}func main() {x := 5addOne(&x)   // 傳遞x的地址fmt.Println(x)  // 輸出:6(x的值被函數內部修改了)
}

數組指針的基本用法

數組指針

可以直接通過指針修改數組元素(Go 會自動解引用),但無法改變數組的長度(數組長度固定)。

package mainimport "fmt"func main() {// 定義一個數組arr := [3]int{10, 20, 30}// 聲明一個數組指針,指向arrvar p *[3]int = &arr// 打印指針存儲的地址(數組的地址)fmt.Println("數組地址:", p)  // 類似 0xc00001a0c0// 通過指針訪問數組元素(兩種方式都可以)fmt.Println(p[0])   // 直接用指針[索引],輸出 10fmt.Println((*p)[1])// 先解引用再訪問,輸出 20(和上面效果一樣)// 通過指針修改數組元素p[2] = 300fmt.Println(arr[2]) // 輸出 300,原數組被修改了
}

    切片指針

    需先解引用指針才能操作切片元素,且可以修改切片的長度、容量或底層數組(通過?append?等操作)。

    s := []int{1, 2, 3}
    p := &s         // 切片指針 *[]int
    (*p)[0] = 100   // 必須解引用才能修改元素(不能直接 p[0])
    *p = append(*p, 4) // 修改切片本身(長度變為4)
    fmt.Println(s)  // 輸出 [100 2 3 4]

    函數中使用數組指針

    package mainimport "fmt"// 接收數組指針參數
    func modifyArray(p *[3]int) {p[0] = 100  // 修改數組第一個元素
    }func main() {arr := [3]int{1, 2, 3}modifyArray(&arr)  // 傳遞數組的地址fmt.Println(arr)   // 輸出 [100 2 3],原數組被修改
    }

    ** 指針的指針

    func main() {num := 10p := &num    // 一級指針(*int)pp := &p     // 二級指針(**int)**pp = 20    // 通過二級指針修改原變量fmt.Println(num) // 輸出 20
    }

    123

    本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
    如若轉載,請注明出處:http://www.pswp.cn/diannao/98237.shtml
    繁體地址,請注明出處:http://hk.pswp.cn/diannao/98237.shtml
    英文地址,請注明出處:http://en.pswp.cn/diannao/98237.shtml

    如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

    相關文章

    java社交小程序源碼支持APP多端springboot部署與功能模塊詳解

    構建一個支持 多端訪問、實時互動、商城交易 的綜合型應用,已成為眾多企業和開發團隊的共同目標。由 寵友信息技術有限公司 打造的 友貓社區,正是基于 Spring Boot 技術棧 的全端解決方案,既能支持 微信小程序、APP、PC管理后臺,又…

    代理連接性能優化:提升網絡效率的關鍵技術與實踐

    在當今數字化時代,代理連接性能優化已成為網絡架構設計中的關鍵環節。本文將深入探討如何通過技術手段提升代理服務器的響應速度、穩定性和資源利用率,幫助讀者構建高效可靠的代理網絡體系。 代理連接性能優化:提升網絡效率的關鍵技術與實踐 …

    Rust 元組

    簡介 元組可以由多種類型組成,長度固定。 創建元組 // 固定類型 let tup1: (i32, f64, u8) (500, 8.8, 1);// 不固定類型 let tup2 (500.99, 8.8, 1, 9.99);println!("{}", tup2.0);用模式匹配解構元組 let tup (500.99, 8.8, 1, 9.99); let (x, y…

    突破閉集限制:3D-MOOD 實現開集單目 3D 檢測新 SOTA

    【導讀】 單目 3D 目標檢測是計算機視覺領域的熱門研究方向,但如何在真實復雜場景中識別“未見過”的物體,一直是個難題。本文介紹的 3D-MOOD 框架,首次提出端到端的開集單目 3D 檢測方案,并在多個數據集上刷新了 SOTA。 目錄 …

    Python爬蟲數據清洗實戰:從雜亂無章到整潔可用

    小伙伴們,做爬蟲最頭疼的不是抓數據,而是抓回來那一堆亂七八糟的內容!價格里混著符號、日期格式千奇百怪、還有重復和缺失的值,看著就頭大。別慌,咱們用Python幾招就能搞定。Pandas處理表格數據是真香,正則…

    打工人日報#20250906

    打工人日報#20250906 周六了! 今天出門讀者特別痛,本來都想爽約了,不過忍下來了了,現在看來很值得! 不過還是要好好吃早餐、和熱水! 閱讀 《小米創業思考》 第一章 奇跡時代 看完了 就是快呀 好的產品 好的…

    小型磨床設計cad+三維圖+設計說明書

    摘 要 隨著現代加工技術的發展,各種各樣的加工技術得到了廣泛的應用,磨床在機械制造領域得到了廣泛的應用,本文經過查閱相關文獻,完成了一種小型磨床的結構設計。 本文設計的小型磨床其主要是由三部分組成的,第一部分…

    音響皇帝BO,牽手全球第一AR眼鏡雷鳥,耳機黨坐不住了?

    【潮汐商業評論/原創】自AI大模型技術實現突破以來,即引發一場終端革命,關于下一個智能終端入口,或者說關于下一代計算平臺,市場有過很多“狼來了”的聲音,大家紛紛猜測,在智能手機之后,究竟誰有…

    中斷和異常

    中斷和異常簡介 在計算機體系結構和操作系統中,中斷(Interrupt) 和 異常(Exception) 是CPU應對突發事件、實現多任務并發和錯誤處理的核心機制。二者均通過暫停當前任務、轉去執行特定處理程序來響應事件,但…

    Fab資源快速導入UE

    有時候在Epic啟動器導入進度會卡住可以直接使用ue內置Fab來導入資源 這樣是百分百能導入的

    Python錯誤測試與調試——文檔測試

    Doctest 通過解析文檔字符串(docstring)中的交互式 Python 代碼片段(以 >>>開頭)進行測試,驗證代碼輸出是否與預期一致。測試用例直接嵌入代碼中,實現“文檔即測試”核心語法:def func…

    c#核心筆記

    111,面向對象 1,面向過程編程:是一種以過程為中心的編程思想分析出解決問題所需要的步驟然后用函數把步驟一步一步實現使用的時候,一個一個依次調用。 2,面向對象編程:面向對象是一種對現實世界理解和抽象的…

    【MySQL】從零開始了解數據庫開發 --- 初步認識數據庫

    永遠記住,你的存在是有意義的, 你很重要, 你是被愛著的, 而且你為這個世界帶來了無可取代的東西。 -- 麥克西 《男孩、鼴鼠、狐貍和馬》-- 從零開始了解數據庫開發安裝MySQL什么是數據庫常見主流數據庫初步了解SQL語句存儲引擎安裝…

    Altium Designer(AD24)切換工作界面為淺灰色的方法

    ??《專欄目錄》 目錄 1,概述 2,界面介紹 1,概述 本文演示AD24軟件黑色界面切換為淺灰色的方法。 2,界面介紹 第1步:點擊設置小圖標,然后點擊View 第2步:在UI Theme,點擊Current旁邊的Altium Dark Gtay ,在下拉選項中選擇Altium Light Gtay,然后點擊OK確認 第4步…

    SDRAM詳細分析—07 存儲器陣列尋址

    大家好,這里是大話硬件 這篇文章將分析實際SDRAM內部是如何進行尋址以及內存單元分布方式。 根據前面的內容,從小容量到大容量進行迭代分析。 1. 1bit容量 這個存儲單元只能存儲1個bit位。假設現在需要8bit內存容量顆粒,則需要8顆這樣的存儲器件。 2. 4bit容量 這個存儲…

    【GitOps】Argo CD高級操作鉤子

    Argo CD高級操作鉤子 文章目錄Argo CD高級操作鉤子資源列表一、Argo CD鉤子1.1、鉤子介紹1.2、構建的幾個執行階段1.3、鉤子刪除策略1.4、示例二、鉤子演示2.1、創建GitLab公共倉庫2.2、Argo CD創建Application2.3、同步(SYNC)資源列表 操作系統配置主機…

    諳流 ASK 技術解析(一):秒級擴容

    諳流 ASK 是諳流團隊自主研發的國產新一代云原生流平臺,與 Apache Kafka 100% 協議兼容,全棧自主可控,專注私有化部署與行業場景賦能。傳統Kafka存儲之殤IO模型缺陷每個分區對應獨立文件,采用單分區異步批量順序寫機制。當多分區并…

    從挑西瓜到樹回歸:用生活智慧理解機器學習算法

    一、生活中的決策樹:媽媽的挑瓜秘籍夏天的菜市場里,媽媽總能精準挑出最甜的西瓜。她的秘訣是一套簡單的決策流程:先看色澤,青綠有光澤的優先;再敲一敲,聲音沉悶的更可能熟;最后摸硬度&#xff0…

    SpringBoot+PDF.js實現按需分片加載(包含可運行樣例源碼)

    SpringBootPDF.js實現按需分片加載前言一、實現思路與實現效果1.1 pdf.js的分片加載的實現思路1.2 pdf分片加載的效果二、前端項目2.1 項目引入2.2 核心代碼2.3 項目運行三、后端項目3.1 項目結構3.2 核心代碼3.3 項目運行四、項目運行效果4.1 首次訪問4.2 分片加載五、項目優化…

    常見Bash腳本漏洞分析與防御

    引言 在Unix/Linux系統中,Bash腳本因其簡潔、高效而成為自動化任務、系統管理和快速原型開發的首選工具。然而,Bash的強大功能和其獨特的語法特性,也為安全漏洞埋下了隱患。許多開發者在追求便捷性的過程中,無意間引入了命令注入、…