OC底層實(shí)現(xiàn)_準(zhǔn)備知識_04

(一)計(jì)算結(jié)構(gòu)體struct需要的內(nèi)存空間

#import <Foundation/Foundation.h>

// 定義一個(gè)三維的點(diǎn)結(jié)構(gòu)體,名字叫 AA_Point
// Note:注意類型是 struct AA_Point
// 不要直接單獨(dú)使用 AA_Point
struct AA_Point {
    int x;
    int y;
    int z;
};

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        NSLog(@"struct AA_Point  需要內(nèi)存空間size:%lu", sizeof(struct AA_Point));
        
        // 創(chuàng)建一個(gè)點(diǎn)
        struct AA_Point point_1 = {3, 4, 5};
        
        NSLog(@"結(jié)構(gòu)體變量 point_1 需要內(nèi)存空間size:%lu", sizeof(point_1));
    }
    return 0;
}

打印結(jié)果如下:

struct AA_Point  需要內(nèi)存空間size:12
結(jié)構(gòu)體變量 point_1 需要內(nèi)存空間size:12

03節(jié),我們已經(jīng)驗(yàn)證了int需要4個(gè)字節(jié),所以3個(gè)int類型,自然需要12個(gè)字節(jié)的內(nèi)存空間,所以結(jié)構(gòu)體類型struct AA_Point需要12個(gè)字節(jié)的內(nèi)存空間.

(二)結(jié)構(gòu)體指針變量

// 創(chuàng)建一個(gè)點(diǎn)
struct AA_Point point_1 = {3, 4, 5};
        
NSLog(@"結(jié)構(gòu)體變量 point_1 需要內(nèi)存空間size:%lu", sizeof(point_1));
        
struct AA_Point *p_AA_Point = &point_1;
        
NSLog(@"結(jié)構(gòu)體變量 point_1 內(nèi)存地址:%p", &point_1);
NSLog(@"結(jié)構(gòu)體指針變量 p_AA_Point 內(nèi)存地址:%p", &p_AA_Point);
NSLog(@"結(jié)構(gòu)體指針變量 p_AA_Point 中的數(shù)據(jù):%p", p_AA_Point);
NSLog(@"結(jié)構(gòu)體指針變量 p_AA_Point 中的數(shù)據(jù)需要內(nèi)存空間:%lu", sizeof(p_AA_Point));

打印結(jié)果如下:

結(jié)構(gòu)體變量 point_1 內(nèi)存地址:0x7ffeefbff500
結(jié)構(gòu)體指針變量 p_AA_Point 內(nèi)存地址:0x7ffeefbff4f8
結(jié)構(gòu)體指針變量 p_AA_Point 中的數(shù)據(jù):0x7ffeefbff500
結(jié)構(gòu)體指針變量 p_AA_Point 中的數(shù)據(jù)需要內(nèi)存空間:8

打印可以確認(rèn): p_AA_Point 中的數(shù)據(jù)就是變量 point_1 的內(nèi)存地址. p_AA_Point 是不是自己也得有自己的地址.
結(jié)構(gòu)體指針變量存放的是數(shù)據(jù)是內(nèi)存地址,內(nèi)存地址是64位機(jī)器下的,所以結(jié)構(gòu)體指針變量就需要8個(gè)字節(jié)存儲空間.

Note:在64位機(jī)器下,指針變量需要的內(nèi)存空間都是8個(gè)字節(jié),不管指向什么類型的變量.void * 可以指向任何類型,就是因?yàn)関oid *中的數(shù)據(jù)(內(nèi)存地址數(shù)據(jù))都是8個(gè)字節(jié).

到這有點(diǎn)暈的小伙伴,最好再看看前面小節(jié)的內(nèi)容,不然,就更暈了.

(三)結(jié)構(gòu)體中有指針變量

結(jié)構(gòu)體嵌套的內(nèi)存空間計(jì)算,就請小伙伴們自己嘗試一下了.

// 定義一個(gè)圓球結(jié)構(gòu)體
struct AA_RoundBall {
    // 定義圓心, 是一個(gè)指針結(jié)構(gòu)體變量
    struct AA_Point *circleCenter;
};

執(zhí)行語句:

    struct AA_RoundBall roundBall = {p_AA_Point};

     NSLog(@"struct AA_RoundBall  需要內(nèi)存空間size:%lu", sizeof(struct AA_RoundBall));
     NSLog(@"結(jié)構(gòu)體變量 roundBall  需要內(nèi)存空間size:%lu", sizeof(roundBall));

打印結(jié)果如下:

struct AA_RoundBall  需要內(nèi)存空間size:8
結(jié)構(gòu)體變量 roundBall  需要內(nèi)存空間size:8

(四)struct AA_RoundBall指針變量

struct AA_RoundBall *p_AA_RoundBall = &roundBall;
        
NSLog(@"struct AA_RoundBall *  需要內(nèi)存空間size:%lu", sizeof(struct AA_RoundBall *));
NSLog(@"結(jié)構(gòu)體指針變量 roundBall  需要內(nèi)存空間size:%lu", sizeof(p_AA_RoundBall));

打印結(jié)果如下:

struct AA_RoundBall *  需要內(nèi)存空間size:8
結(jié)構(gòu)體指針變量 roundBall  需要內(nèi)存空間size:8

結(jié)構(gòu)體成員變量含有指針變量,這個(gè)結(jié)構(gòu)體又可以創(chuàng)建結(jié)構(gòu)體指針變量.如果感覺很暈,本質(zhì)上還是對指針變量的不理解.

PS: 指針變量首先它是一個(gè)變量,變量是不是得給它一個(gè)地址,放東西.這個(gè)東西有點(diǎn)特殊,是另一個(gè)內(nèi)存地址.指針變量和普通變量都一樣,都有一個(gè)地址,都需要一個(gè)內(nèi)存空間放數(shù)據(jù).

GitHub項(xiàng)目代碼

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末什荣,一起剝皮案震驚了整個(gè)濱河市谜悟,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖蕾总,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件囤屹,死亡現(xiàn)場離奇詭異笑跛,居然都是意外死亡付魔,警方通過查閱死者的電腦和手機(jī)聊品,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來几苍,“玉大人翻屈,你說我怎么就攤上這事∑薨樱” “怎么了伸眶?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長惠勒。 經(jīng)常有香客問我赚抡,道長爬坑,這世上最難降的妖魔是什么纠屋? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮盾计,結(jié)果婚禮上售担,老公的妹妹穿的比我還像新娘。我一直安慰自己署辉,他們只是感情好族铆,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著哭尝,像睡著了一般哥攘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上材鹦,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天逝淹,我揣著相機(jī)與錄音,去河邊找鬼桶唐。 笑死栅葡,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的尤泽。 我是一名探鬼主播欣簇,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼坯约!你這毒婦竟也來了熊咽?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤闹丐,失蹤者是張志新(化名)和其女友劉穎横殴,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體妇智,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡滥玷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年氏身,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片惑畴。...
    茶點(diǎn)故事閱讀 38,577評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蛋欣,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出如贷,到底是詐尸還是另有隱情陷虎,我是刑警寧澤,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布杠袱,位于F島的核電站尚猿,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏楣富。R本人自食惡果不足惜凿掂,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望纹蝴。 院中可真熱鬧庄萎,春花似錦、人聲如沸塘安。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽兼犯。三九已至忍捡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間切黔,已是汗流浹背砸脊。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留绕娘,地道東北人脓规。 一個(gè)月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像险领,于是被迫代替她去往敵國和親侨舆。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 指針是C語言中廣泛使用的一種數(shù)據(jù)類型绢陌。 運(yùn)用指針編程是C語言最主要的風(fēng)格之一挨下。利用指針變量可以表示各種數(shù)據(jù)結(jié)構(gòu); ...
    朱森閱讀 3,430評論 3 44
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,090評論 1 32
  • iOS底層原理總結(jié) - 探尋OC對象的本質(zhì) 原文鏈接 對小碼哥底層班視頻學(xué)習(xí)的總結(jié)與記錄脐湾。面試題部分臭笆,通過對面試題...
    二斤寂寞閱讀 646評論 0 4
  • iOS底層原理總結(jié) - 探尋OC對象的本質(zhì) 對小碼哥底層班視頻學(xué)習(xí)的總結(jié)與記錄。面試題部分,通過對面試題的分析探索...
    xx_cc閱讀 21,257評論 31 178
  • ———————————————回答好下面的足夠了---------------------------------...
    恒愛DE問候閱讀 1,712評論 0 4