欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Go指針數(shù)組和數(shù)組指針的具體使用

 更新時間:2024年03月21日 09:41:49   作者:小歐不菜  
go語言跟c語言一樣,指針數(shù)組和數(shù)組指針概念容易搞混,本文主要介紹了Go指針數(shù)組和數(shù)組指針的具體使用,具有一定的參考價值,感興趣的可以了解一下

這個章節(jié)將會簡單講Go 的指針數(shù)組和數(shù)組指針。

我相信學習Go的同學們,應該都是接觸過別的語言吧,Go應該是大部分同學的第二門甚至第好幾門的語言吧,所以大家應該都有一定的語言基礎了,言歸正傳。

先說概念:

指針數(shù)組就是一個數(shù)組,這個數(shù)組的元素是指針(C語言也是這樣)

數(shù)組指針就是一個指針,這個指針指向一個數(shù)組(C語言也是這樣)

好了,概念講完了非常簡單,直接上代碼

一、指針數(shù)組

func My_Print(p [3]*int) {
	fmt.Println(p)
	for _, val := range p {
		fmt.Printf("%d ", *val)
	}
	fmt.Println()
}

func F_1() {
	a1, a2, a3 := 77, 88, 99
	p1 := [3]*int{&a1, &a2, &a3}
	p2 := F_2(p1)
	fmt.Printf("After modification")
	My_Print(p2)
}

func F_2(p [3]*int) [3]*int {
	fmt.Printf("Before modification")
	My_Print(p)

	for i := 0; i < 3; i++ { //我們改變這個指針數(shù)組里面的指針的內(nèi)容
		*(p[i]) = i
	}
	return p
}

func main() {
	F_1()
}

我們直接講代碼,這里有三個函數(shù)My_Print(p [3]*int)、F_1()、F_2(p [3]*int) [3]*int:

My_Print(p [3]*int)   形參是一個指針數(shù)組 ,這就是一個打印這個指針數(shù)組里面的內(nèi)容,數(shù)組里面的內(nèi)容是指針(指向一個地址),地址里面是一個整形變量,這個函數(shù)就是把它們都打印出來。

F_1()    這個函數(shù)就是頂一個指針數(shù)組并且初始化,指針數(shù)組里面放指針所以我們給他初始化三個地址,并且把這個指針數(shù)組當做參數(shù)傳給F_2()

F_2()   這個函數(shù)會先調(diào)用My_Print打印形參內(nèi)容,在修改這個形參。

運行結果如下:

Before modification[0xc000134000 0xc000134008 0xc000134010]
77 88 99 
After modification[0xc000134000 0xc000134008 0xc000134010]
0 1 2 

可以看出修改前和修改后 ,指針數(shù)組里面的指針(這個地址)并沒有變,但是這個指針里的內(nèi)容已經(jīng)被改變了。

二、數(shù)組指針

直接上代碼:

func main() {
	//F_1()
	F_3()
}

func F_3() {
	var p *[3]int
	arr := [3]int{1, 2, 3}
	p = &arr
	fmt.Printf("p = %p,arr = %p\n", p, &arr)

	F_4(p)
	fmt.Println("F_3():", p)
}

func F_4(p *[3]int) {
	// 這里也算是Go的一個語言特性吧,編譯器可以認為p是arr的地址,也可以認為p是arr的引用
	fmt.Println("F_4():", p)
	p[0] = 11
	p[1] = 22
	p[2] = 33
	fmt.Println("F_4():", p)
	(*p)[0] = 99
	(*p)[1] = 88
	(*p)[2] = 77
	fmt.Println("F_4():", p)
}

運行結果如下:

p = 0xc000122000,arr = 0xc000122000
F_4(): &[1 2 3]
F_4(): &[11 22 33]
F_4(): &[99 88 77]
F_3(): &[99 88 77]

這個數(shù)組指針,倒是沒啥難懂的,但是這個可能會讓大家疑惑的應該就是那個F_4()函數(shù)里面那樣寫的問題了。這應該是和Go的GC機制有關。我們在go學習中提過,一個問題就是一個指針指向一個局部變量然后返回這個指針,可是在外部這個指針依舊可以訪問到這個變量的內(nèi)容。 

在Go中一個變量如果在他作用域之外還有存在它的引用時,他是不會被內(nèi)存回收走的,它會存在一個引用它的計數(shù)值,但又多一個它的引用,那它的計數(shù)值加一,反之減一。直到它的引用為零時,GC就會回收這份空間。

個人理解:所以這個形參p也是跟這個GC機制有關,寫法上它就是arr的地址,但是編譯器也可以認為他是arr的引用。

最后分享

不管是學Go或者學C的同學,可能都有點分不清數(shù)組指針和指針數(shù)組,這里是我自己分辨他們兩的方法:

概念上,正如上面所說的:

指針數(shù)組就是一個數(shù)組,這個數(shù)組的元素是指針(C語言也是這樣)

數(shù)組指針就是一個指針,這個指針指向一個數(shù)組(C語言也是這樣)

寫法上:

[] 在 * 前面,那他就是一個數(shù)組,所以是指針數(shù)組,反之數(shù)組指針。(在Go中我是這里記的)

(*a)[], * 被括號起來,說明要a先跟 * 結合,所以這個一個指針,也就是數(shù)組指針,反之指針數(shù)組(C語言中我是這么記的)

到此這篇關于Go指針數(shù)組和數(shù)組指針的具體使用的文章就介紹到這了,更多相關Go指針數(shù)組和數(shù)組指針內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 詳解Go語言RESTful JSON API創(chuàng)建

    詳解Go語言RESTful JSON API創(chuàng)建

    這篇文章主要介紹了詳解Go語言RESTful JSON API創(chuàng)建,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • Go打包附件內(nèi)容到執(zhí)行文件的方法

    Go打包附件內(nèi)容到執(zhí)行文件的方法

    處于種種原因, 我們不希望這部分額外的內(nèi)容以附件的形式出現(xiàn), 有沒有什么辦法能夠?qū)⒏郊?nèi)容直接打包進可執(zhí)行文件中呢,下面小編給大家介紹下Go打包附件內(nèi)容到執(zhí)行文件的方法,感興趣的朋友一起看看吧
    2023-03-03
  • Go語言命令行參數(shù)及cobra使用方法

    Go語言命令行參數(shù)及cobra使用方法

    Cobra是關于golang的一個命令行解析庫,用它能夠快速創(chuàng)建功能強大的 cli應用程序和命令行工具,本文主要介紹了Go語言命令行參數(shù)及cobra使用方法,感興趣的可以了解一下
    2024-01-01
  • Go語言實現(xiàn)的web爬蟲實例

    Go語言實現(xiàn)的web爬蟲實例

    這篇文章主要介紹了Go語言實現(xiàn)的web爬蟲,實例分析了web爬蟲的原理與Go語言的實現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02
  • GO語言數(shù)組和切片實例詳解

    GO語言數(shù)組和切片實例詳解

    這篇文章主要介紹了GO語言數(shù)組和切片的用法,以實例形式較為詳細的分析了GO語言中數(shù)組與切片的創(chuàng)建及使用技巧,是深入學習GO語言的基礎,需要的朋友可以參考下
    2014-12-12
  • Go語言web快速開發(fā)框架Gin的HttpRouter路由的使用

    Go語言web快速開發(fā)框架Gin的HttpRouter路由的使用

    in框架內(nèi)部使用了高性能的路由器庫httprouter,支持動態(tài)參數(shù)匹配和簡潔的接口,本文主要介紹了Go語言web快速開發(fā)框架Gin的HttpRouter路由的使用,感興趣的可以了解一下
    2025-03-03
  • Golang在Mac、Linux、Windows下如何交叉編譯的實現(xiàn)

    Golang在Mac、Linux、Windows下如何交叉編譯的實現(xiàn)

    這篇文章主要介紹了Golang在Mac、Linux、Windows下如何交叉編譯的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-03-03
  • Go語言中調(diào)用外部命令的方法總結

    Go語言中調(diào)用外部命令的方法總結

    在工作中,我們時不時地會需要在Go中調(diào)用外部命令。本文為大家總結了Go語言中調(diào)用外部命令的幾種姿勢,感興趣的小伙伴可以跟隨小編一起學習一下
    2022-11-11
  • Go使用sync.Pool提高性能的代碼示例

    Go使用sync.Pool提高性能的代碼示例

    在高性能應用程序中,頻繁的內(nèi)存分配和回收是性能瓶頸的常見原因之一,Go 語言提供了 sync.Pool 類型,它可以用來存儲和重用臨時對象,本文將詳細介紹如何在 Go 中使用 sync.Pool,并通過實際代碼示例來展示其對性能的提升效果,需要的朋友可以參考下
    2024-04-04
  • GO?env環(huán)境變量配置命令使用

    GO?env環(huán)境變量配置命令使用

    這篇文章主要為大家介紹了GO?env環(huán)境變量配置命令使用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05

最新評論