指針,或者說pointer是一串指向某個(gè)內(nèi)存地址的字符串,所謂指向是指這串字符串的內(nèi)容是內(nèi)存地址的值
我們提供的服務(wù)有:做網(wǎng)站、網(wǎng)站制作、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、羅甸ssl等。為近千家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的羅甸網(wǎng)站制作公司
表示取地址,例如你有一個(gè)變量a那么a就是變量a在內(nèi)存中的地址,對(duì)于golang,指針也是有類型的,比如如果a是一個(gè)string那么a是一個(gè)string的指針類型,在go里面叫string
所以你看到b := a,a,b是兩個(gè)不同的變量,a是string類型,b是string類型,你用fmt去打印b,你會(huì)發(fā)現(xiàn)它是一串內(nèi)存地址,而非a的值
所以為了拿到a的值,有個(gè)操作*,用來取出指針對(duì)應(yīng)內(nèi)存地址里存的值,所以當(dāng)你fmt打印一下*b它會(huì)跟a一模一樣
主要看優(yōu)先級(jí)別,-比++的優(yōu)先級(jí)別高,++p-num,因?yàn)?優(yōu)先級(jí)別高,所以先算p-num,然后num++,p++-num,先算p-num,然后p++
于c語言相同,go中也有指針和結(jié)構(gòu)體的概念。指針表示變量的內(nèi)存地址,結(jié)構(gòu)體用來存儲(chǔ)同一類型的數(shù)據(jù)。
定義一個(gè)指針變量,將變量a的地址賦給指針變量p。這樣,指針變量p也就指向了變量a所在的內(nèi)容空間。
new 函數(shù)返回一個(gè)指針變量
fmt.scan() 就是傳入一個(gè)指針變量。
兩種方法都可以使用。
以上簡要介紹了go語言中的指針和結(jié)構(gòu)體。
Go語言里面的指針和C++指針一樣,都是指向某塊內(nèi)存的地址值,可以解引用,不同只是在于C++里可以直接對(duì)指針做算術(shù)運(yùn)算而Go里面不行。
如果該函數(shù)會(huì)修改receiver,此時(shí)一定要用指針
如果receiver是 struct 并且包含互斥類型 sync.Mutex ,或者是類似的同步變量,receiver必須是指針,這樣可以避免對(duì)象拷貝
如果receiver是較大的 struct 或者 array ,使用指針則更加高效。多大才算大?假設(shè)struct內(nèi)所有成員都要作為函數(shù)變量傳進(jìn)去,如果覺得這時(shí)數(shù)據(jù)太多,就是struct太大
如果receiver是 struct , array 或者 slice ,并且其中某個(gè)element指向了某個(gè)可變量,則這個(gè)時(shí)候receiver選指針會(huì)使代碼的意圖更加明顯
如果receiver使較小的 struct 或者 array ,并且其變量都是些不變量、常量,例如 time.Time ,value receiver更加適合,因?yàn)関alue receiver可以減少需要回收的垃圾量。
tips: *號(hào),可以指向指針類型內(nèi)存地址上的值,號(hào),可以獲取值類型的內(nèi)存地址
每一個(gè)變量都有內(nèi)存地址,可以通過變量來操作內(nèi)存地址中的值,即內(nèi)存的大小
go語言中獲取變量的內(nèi)存地址方法:通過 符號(hào)可以獲取變量的地址
定義:普通變量存儲(chǔ)的是對(duì)應(yīng)類型的值,這些類型就叫值類型
變量b,在內(nèi)存中的地址為:0x1040a124,在這個(gè)內(nèi)存地址上存儲(chǔ)的值為:156
定義:指針類型的變量存儲(chǔ)的是?個(gè)地址,所以?叫指針類型或引?類型
b 是值類型,它指向的是內(nèi)存地址上的值
a是指針類型,它指向的是b的內(nèi)存地址
指針類型定義,語法: var 變量名 *類型
指針類型在定義完成后,默認(rèn)為空地址,即空指針(nil)
在定義好指針變量后,可以通過***** 符號(hào)可以獲取指針變量指向的變量
在這里的 *a 等價(jià)于 b,通過修改 *a ,最終修改的是值類型b的值
這里a,d是值類型,b,c是指針類型
d就相當(dāng)于把a(bǔ)內(nèi)存地址上值,在內(nèi)存中從新開辟了一塊空間存儲(chǔ),d和a互不影響
b,c相當(dāng)于指向了a的內(nèi)存地址,當(dāng)使用*號(hào)引用出內(nèi)存地址上的變量上,修改值得,a的值也會(huì)跟著改變