欧美日韩在线第一页-欧美日韩在线观看精品-欧美日韩在线观看一区二区-欧美日韩在线免费看-欧美日韩在线视频不卡一区二区三区

編程代碼
新聞詳情

「C++」讀懂指針與內存

發布時間:2021-01-18 09:08:08 瀏覽次數:2950

C和C++最強大的地方在哪里呢?就是指針對內存的操作。有了指針我們才可以在代碼內存里自由飛翔,想玩哪里玩哪里,想變什么變什么。


內存
首先我們聊聊什么是內存(我們以32位程序模型為例)。對于一個進程來說,內存可以理解成一連串的帶編號的存儲區域。

每個進程都映射一段連續的虛擬內存地址(不是內存的真實物理地址,只是一個編號,物理內存地址可以不連續)。

「C++」讀懂指針與內存

每個格子我們理解為一個字節,也就是一個byte或者說一個unsigned char。


而指針其實就是一個數字,記錄的就是內存的地址,也就是我們標記的每個小格子的數字編號。

在32位系統的時候,指針占4個字節,能表示的數字最大值是4294967295。

(64位程序指針占8個字節,所以能使用的內存空間就很大)

「C++」讀懂指針與內存

「C++」讀懂指針與內存

將4294967295個字節轉換G單位大概就是4G。所以32位程序能用的最大內存空間就是4G。其中0到3G是用戶空間,3G到4G是內核空間,我們在實際使用32位程序時候,大概也就能操作到1.7G左右的內存,超過這個量再分配內存基本上程序就崩潰了。


程序的內存區域大概分了如圖六塊,其中堆和棧是根據實際運行情況擴展使用內存區域。

「C++」讀懂指針與內存

來來來。。我們寫段代碼驗證下,都用int變量,偏移量是4個字節,方便查看。

看看運行結果,內存地址就是這樣按照區域分配的。

「C++」讀懂指針與內存

「C++」讀懂指針與內存

指針

明白了內存,我們就來玩玩指針,看他怎么個自由飛翔。

先上一段樸實的代碼:

「C++」讀懂指針與內存

運行結果是這樣的:

「C++」讀懂指針與內存

讓我們來分析下這段代碼吧。


為了方便使用結構體倒騰,我這里都用的是4倍體的變量,而且把double放在了第一個。關于結構體排列問題有機會我再寫寫。反正這里呢,就按照這幾個位置排列內存了。


首先我們整了一個100字節的內存,神馬都沒有,然后通過指針和偏移量,我們可以跳轉到內存任意位置,并且可以把那個位置解釋成任意類型。所以指針可以是8字節的double類型,也可以是4字節的int和float類型,然后對該類型直接賦值。

最后,我們直接來個風騷操作,把這段內存強制當成結構體類型的指針,然后因為位置能對上,所以結構體內的成員變量就都對應上了。


然后我們再來玩一玩快樂指針的游戲,依然使用剛才內存倒騰過的區域。

「C++」讀懂指針與內存

這里p指向了b變量的位置,此時我們可以把p當成一個int數組,所以p[3]就是該數組第四個元素,也就是變量e。

「C++」讀懂指針與內存

這里p+2表示按照指針類型移動2個位置,int是4個字節,所以內存上總共移動8個字節,到了d的位置,雖然位置對了,但是d不是一個int類型,按照int去解釋是錯誤的。所以我們把類型解釋成float。

「C++」讀懂指針與內存

當然因為float也是4個字節,所以我們可以p[2]直接取到d位置的值,此時這里是解釋出來的int值是錯誤的,然后我們取地址變成指針,再強轉成float指針,再取值,結果一樣。


記住。。。指針就是地址數字而已,可以轉成任意類型,可以按照指針對應類型的大小做加減法偏移,也可以按照指針對應類型的大小做數組偏移。

在線客服 雙翌客服
客服電話
  • 0755-23712116
  • 13310869691
主站蜘蛛池模板: 女的被到爽的视频在线观看| 国产精品高清久久久久久久| 91在线一区二区三区| 正在播放亚洲一区| 青青青网| 国产在线观看入口| 娇小被黑人巨嗷嗷叫| 丁香六月婷婷在线| 久久精品2019www中文| 午夜精品久久久久久99热7777| 一区二区三区在线免费观看视频| 日韩激情视频网站| 在线观看黄网址| 免费观看黄a一级视频| 国产日b视频| 国产精品一区在线播放| 精品国产一级在线观看| 国产高清一区二区| 九九热精品视频在线观看| 日韩欧美一区二区三区 | 欧美日韩成人午夜免费| 国产精品区一区二区免费| 黄站无毒不卡秒播网站免费观看| 国产精品爱久久久久久久| 久久国产一久久高清| 欧美bbwhd极品另类| 色综合视频在线| 亚洲 欧美 精品 中文第三| 亚洲一区二区三区在线免费观看| www.91在线| 一区在线观看| 久久久精品影院| 无内丝袜透明在线播放| 日韩欧美卡一卡二卡新区| 亚洲免费黄色网址| 亚洲国产综合视频| 在线亚洲精品国产成人二区| 免费一级片在线| 玖玖精品在线视频| 免费观看一级黄色片| 免费爱爱视频网站|