oc學習之路 搞死指標之記憶體儲存int型別

2022-09-17 05:42:11 字數 952 閱讀 5184

關於每個資料型別個位元組在記憶體中的儲存位址(以int為例)

先上圖

如題,為什麼說好的*p = &c是1啊,為什麼是513呢,一開始,我也覺得挺驚訝的,後面聽老師分析了一下才知道怎麼回事,但是還是有那麼乙個為題不知道怎麼回事,經過上網查了下資料,終於有了些眉目,但是一樣有乙個問題(後面回說道),切讓我拋磚引玉。

要理解這個程式,首先我們要了解每個資料型別的位元組排序

而位元組排序又分兩種:一種是 big endian 一種是little endian

big endian意思是講高序位元組(高位)儲存到所分配到記憶體起始位置,而little endian是講低位元組(地位)儲存到所分配到記憶體的起始位置。

如下圖

了解了吧,然後再說話題目,為什麼是513呢?

是因為int *p 這個int是用於取值用得,記住是取值用得,而分配記憶體用到的指標是8個位元組,這個不用說了把,在乙個系統裡面指標是固定位元組數的,不分資料型別,在我這台機器上是8個位元組,一般都是8個位元組的。

所以,當int型別的指標p指向char型別的指標的時候,取得不是乙個位元組,也不是8個位元組,是4個位元組(int型別的)

所以從記憶體位址ff10記起,取四個位元組,好了,上面那張excel圖裡面,就是從0000 0001往下數四行,在通過高到低排序,有幾種可能,但是要得到結果513,只有一種可能,就是第一幅圖,並且排序是從下往上(高位到低位),還有一點,j**a的位元組排序都是big endien的,而c的就是分cpu的。

還有乙個問題,在第一張圖,為什麼記憶體位址相差一位呢?有沒有一種方法可以取得資料型別的每乙個位元組所在記憶體位址呢?還是我概念有些模糊了?僅個人見解,如有不對請不要給麵的指出。歡迎交流q1413557667

oc學習之路 多級指標的使用和記憶體分析

恢復內容開始 精髓 要熟悉指標的使用,首先要熟悉指標的各種狀態存得是什麼資料。以一級指標 int p1 二級指標 int p2 指標 int p3為例 一級指標 p1 取得是目標儲存空間的值 p2取得的是目標儲存空間的儲存位址,p1取得是當前儲存空間的儲存位址,二級指標使用 include void...

黑馬程式設計師學習筆記 OC之記憶體管理 2

黑馬程式設計師學習筆記 oc記憶體管理2 1 迴圈引用 對於迴圈依賴關係來說,比方a類引用b類,同時b類也引用a類這種 編譯會報錯。2 class 當使用 class在兩個類相互宣告,就不會出現編譯報錯,使用 class 類名 就可以引用乙個類,說明一下它是乙個類。3 和 import 的區別1 i...

黑馬程式設計師 oc語言學習筆記之記憶體管理一

oc語言記憶體管理一 一.記憶體管理的原理 1 物件的所有權及引用計數 物件的所有權 任何物件都可能擁有乙個或者多個所有者,只要乙個物件至少擁有乙個所有者,它就會繼續存在 2 物件的引用計數器 每個oc物件都有自己的引用計數器,是乙個整數表示物件被引用的次數,即現在有多少東 西在使用這個物件,物件剛...