成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

800字徹底理解Go指針

開發(fā) 后端
簡單點(diǎn)說,指針是指向另一個(gè)地址的值。這是教科書上的解釋,但如果你轉(zhuǎn)自一門不用談?wù)撟兞康刂返拈_發(fā)語言時(shí),這個(gè)解釋看上去猶如一串楔形文字,難以理解。

這篇文章是為不熟悉 Go 的指針或指針類型的程序員而準(zhǔn)備的。

什么是指針?

簡單點(diǎn)說,指針是指向另一個(gè)地址的值。這是教科書上的解釋,但如果你轉(zhuǎn)自一門不用談?wù)撟兞康刂返拈_發(fā)語言時(shí),這個(gè)解釋看上去猶如一串楔形文字,難以理解。

讓我們分解一下。

什么是內(nèi)存?

計(jì)算機(jī)內(nèi)存,即 RAM,可以被看作是一串盒子,一個(gè)接一個(gè)地排成一行。

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

 

800 字徹底理解 Go 指針

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

這都是關(guān)于內(nèi)存的知識(shí),CPU 所做的一切都是為獲取和存儲(chǔ)值到內(nèi)存單元中。

什么是變量?

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

  • 讀取存儲(chǔ)在內(nèi)存地址為 200 的值,并將其暫存在 CPU 中;
  • 將存儲(chǔ)在 CPU 中的值乘以 3;
  • 將存儲(chǔ)在 CPU 中的值存入內(nèi)存地址為 201 的位置;

 

800 字徹底理解 Go 指針

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

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

為了解決這個(gè)問題,創(chuàng)造了變量的概念。變量只是一個(gè)由數(shù)字字母組成的、標(biāo)識(shí)存儲(chǔ)位置的假名。

現(xiàn)在,我們不再討論存儲(chǔ)位置,而是討論變量,這是我們?yōu)閮?nèi)存位置提供的方便記憶的名稱。之前的程序現(xiàn)在可以表示為:

  • 讀取變量 a 中存儲(chǔ)的值并將其放入 CPU 中;
  • 將其乘以 3;
  • 將結(jié)果存入變量 b;

 

800 字徹底理解 Go 指針

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

現(xiàn)在,我們可以像下面這樣寫程序:

  1. var a = 62 
  2. var b = a * 3 

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

什么是指針?

現(xiàn)在我們已經(jīng)知道,內(nèi)存是一系列編號的單元格,而變量僅僅是標(biāo)識(shí)內(nèi)存位置的昵稱,那指針是什么呢?

指針是指向另一個(gè)變量的內(nèi)存位置的值。

指針指向變量的內(nèi)存地址,就像變量標(biāo)識(shí)值的內(nèi)存地址一樣。

一起來看下這段代碼:

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

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

 

800 字徹底理解 Go 指針

接著,聲明了變量 b 并將變量 a 的地址賦值給它。記住,我們不知道變量 a 存儲(chǔ)的確切地址,但是我們?nèi)匀豢梢詫?a 的地址存儲(chǔ)在 b 中。

 

800 字徹底理解 Go 指針

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

 

800 字徹底理解 Go 指針

然后將值加一,并將結(jié)果存儲(chǔ)在 b 指向的內(nèi)存位置上,即變量 a 所在的內(nèi)存位置。

 

800 字徹底理解 Go 指針

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

總結(jié)

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

指針是指向另一個(gè)變量的內(nèi)存位置的值。

責(zé)任編輯:未麗燕 來源: 今日頭條
相關(guān)推薦

2023-10-27 11:21:20

C語言Multics語言

2021-12-06 11:19:47

語言指針內(nèi)存

2022-01-06 14:25:24

C語言指針內(nèi)存

2022-10-20 18:43:32

C語言golang安全

2021-08-15 08:11:54

AndroidSynchronize關(guān)鍵字

2021-05-13 08:55:33

Android架構(gòu)功能

2019-11-07 10:37:36

CookieSessionToken

2020-03-03 14:15:49

Redis持久化數(shù)據(jù)庫

2019-06-11 14:45:25

2019-01-09 08:31:07

2024-03-15 08:23:26

異步編程函數(shù)

2019-08-15 14:42:24

進(jìn)程線程javascript

2023-12-28 10:39:57

數(shù)組節(jié)點(diǎn)數(shù)據(jù)結(jié)構(gòu)

2023-01-06 08:42:41

動(dòng)態(tài)規(guī)劃字符

2022-10-24 08:08:27

閉包編譯器

2021-12-27 09:33:12

內(nèi)存泄漏程序

2021-09-27 22:49:13

GoC 指針

2021-04-13 07:58:42

Go語言函數(shù)

2022-12-29 08:12:51

動(dòng)態(tài)規(guī)劃profit

2022-02-28 11:10:42

ZGCG1收集器
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 天天干天天操天天射 | 日韩在线免费 | 欧美区在线 | 欧美日韩高清 | 国产一区三区视频 | 嫩呦国产一区二区三区av | 色婷综合网 | 一区二区日韩精品 | 天天插天天操 | 日韩一区中文字幕 | 久久免费高清 | 青娱乐国产 | 国产在线精品免费 | 在线成人www免费观看视频 | 96国产精品久久久久aⅴ四区 | 91精品国产91久久久久久最新 | 在线观看亚 | 成人欧美 | 欧美一区二区三区在线观看 | 久久99精品久久久久久国产越南 | 欧美一区中文字幕 | 午夜视频在线 | 欧美一级黄带 | 欧美国产视频 | 成人午夜视频在线观看 | 中文字幕精品视频在线观看 | 亚洲人成在线观看 | 欧美激情国产日韩精品一区18 | 射欧美 | 久久一级 | 精品成人免费一区二区在线播放 | 在线免费国产视频 | 日韩黄a | 免费看一区二区三区 | 男女啪啪网址 | 亚洲欧美在线视频 | 欧美日韩国产一区二区 | 日韩欧美大片 | 成人综合在线视频 | 亚洲一区视频在线 | 欧美又大粗又爽又黄大片视频 |