91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何徹底理解Go指針

發布時間:2021-11-25 21:37:36 來源:億速云 閱讀:141 作者:柒染 欄目:編程語言

如何徹底理解Go指針,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

什么是指針?

簡單點說,指針是指向另一個地址的值。這是教科書上的解釋,但如果你轉自一門不用談論變量地址的開發語言時,這個解釋看上去猶如一串楔形文字,難以理解。

讓我們分解一下。

什么是內存?

計算機內存,即 RAM,可以被看作是一串盒子,一個接一個地排成一行。

每個盒子(或者稱為單元格)都標有一個惟一的數字,數字按順序遞增;這是單元格的地址,其所在的內存位置。

如何徹底理解Go指針

每一個單元格存儲一個值。如果你知道某個單元格的內存地址,就可以訪問該單元格并讀取里面的內容。或者用另外一個值替換該單元格內之前的值。

這都是關于內存的知識,CPU 所做的一切都是為獲取和存儲值到內存單元中。

什么是變量?

編寫一段代碼讀取儲存在內存地址為 200 的值,將其乘以 3 并將結果存儲在內存地址為 201 的位置,偽代碼流程如下:

  • 讀取存儲在內存地址為 200 的值,并將其暫存在 CPU 中;

  • 將存儲在 CPU 中的值乘以 3;

  • 將存儲在 CPU 中的值存入內存地址為 201 的位置;

如何徹底理解Go指針

這正是早期程序的編寫方式。程序員將保留一個內存位置列表,包括誰使用它、何時使用以及存儲在其中的值表示什么。

很明顯,這很繁瑣而且容易出錯,這也意味著在編寫程序期間,必須給存儲在內存中的每一個可能的值分配一個地址。更糟糕的是,這種方式使得在程序運行時動態地將內存分配給變量變得異常困難  -- 試想一下,如果你不得不使用全局變量來編寫大型程序。

為了解決這個問題,創造了變量的概念。變量只是一個由數字字母組成的、標識存儲位置的假名。

現在,我們不再討論存儲位置,而是討論變量,這是我們為內存位置提供的方便記憶的名稱。之前的程序現在可以表示為:

  • 讀取變量 a 中存儲的值并將其放入 CPU 中;

  • 將其乘以 3;

  • 將結果存入變量 b;

如何徹底理解Go指針

這是同一個程序,但有一個重要的改進 — 我們不再需要直接討論內存位置,也不再需要跟蹤它們 — 把這些繁重的工作交給編譯器處理。

現在,我們可以像下面這樣寫程序:

var a = 62 var b = a * 3

編譯器將確保為變量 a 和 b 分配唯一的內存位置,以便根據需要保存它們的值。

什么是指針?

現在我們已經知道,內存是一系列編號的單元格,而變量僅僅是標識內存位置的昵稱,那指針是什么呢?

指針是指向另一個變量的內存位置的值。

指針指向變量的內存地址,就像變量標識值的內存地址一樣。

一起來看下這段代碼:

1func main() { 2 a := 200 3 b := &a 4 *b++ 5 fmt.Println(a) 6}

第二行代碼聲明了變量 a 且賦值 200。

如何徹底理解Go指針

接著,聲明了變量 b 并將變量 a 的地址賦值給它。記住,我們不知道變量 a 存儲的確切地址,但是我們仍然可以將 a 的地址存儲在 b 中。

如何徹底理解Go指針

第四行代碼是最難理解的。變量 b 存儲的是變量 a 的地址,但我們又想將 a 的值加一。為了達到這個目的,必須使用解引用,通過 b 獲得 a  的值。

如何徹底理解Go指針

然后將值加一,并將結果存儲在 b 指向的內存位置上,即變量 a 所在的內存位置。

如何徹底理解Go指針

最后一行代碼打印的就是 a 的值,也是加一之后的值 201。

如果你之前使用的語言沒有指針的概念或者每個變量都隱含指針,不要驚慌,理解變量與指針之間的關系需要時間與實踐,請記住這條規則:

指針是指向另一個變量的內存位置的值。

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

go
AI

肃宁县| 嵩明县| 西盟| 乌恰县| 伊宁县| 湖南省| 渝北区| 滁州市| 平山县| 江油市| 临江市| 庆阳市| 文登市| 册亨县| 永吉县| 邵阳县| 邛崃市| 新源县| 肥乡县| 民权县| 西充县| 青海省| 尼玛县| 黄平县| 仁布县| 大英县| 电白县| 建瓯市| 含山县| 宁波市| 碌曲县| 历史| 大荔县| 开江县| 胶州市| 巴东县| 崇州市| 茌平县| 泽库县| 南通市| 万源市|