99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

底層解析C指針(二)

CHANBAEK ? 來源:博客園-LSWen ? 作者:博客園-LSWen ? 2023-02-15 14:48 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

上一篇主要討論了C指針的本質(zhì),但并沒有解釋指針的類型問題,這次我們重點(diǎn)來討論指針的類型與指針內(nèi)存分配之間的關(guān)系。

對(duì)比以下兩個(gè)指針

int *p;

char *p;

單純從上面看這兩個(gè)指針有何區(qū)別?

很多讀者第一反應(yīng)就是其類型不同,確實(shí)沒錯(cuò),但是我們現(xiàn)在需要從底層出發(fā),搞清楚指針類型的意義。

其實(shí)單純從上面來看,兩個(gè)指針是沒有任何區(qū)別的,其內(nèi)存的大小完全相同。

但是由于指針有++和--操作,導(dǎo)致指針的偏移量大小到底多大,這個(gè)就需要由類型決定。 因此類型僅僅只決定指針移動(dòng)時(shí)偏移的大小。

下面我們來徹底分析指針這個(gè)問題。

程序員開始寫int *p這句時(shí),計(jì)算機(jī)僅僅為p分配了一個(gè)四字節(jié)的內(nèi)存地址(假設(shè)編譯器為32位),而這個(gè)內(nèi)存地址中存儲(chǔ)的數(shù)據(jù)是多少并不知道,由于其數(shù)據(jù)可能是一個(gè)隨機(jī)數(shù),因此我們強(qiáng)行訪問p時(shí)會(huì)得到一些隨機(jī)的數(shù)字,這又一步說明了指針為啥需要進(jìn)行初始化,但是,我們?nèi)绻榭?p時(shí),我們可以看到這是合法的,因?yàn)槲覀儾榭吹氖莗的地址, 即計(jì)算機(jī)為p分配的一個(gè)內(nèi)存地址,如圖所示:

截圖20230109091048.png

這個(gè)可能比較好理解

我們現(xiàn)在開始深入,看如下:(下面代碼摘自作者寫的嵌入式操作系統(tǒng)

typedef struct PCB_STRUCT
{
    struct PCB_STRUCT *TCBPrev;       //前趨指針
    struct PCB_STRUCT *TCBNext;       //后繼指針

    UINT32             TCBDlyCount;   //延時(shí)計(jì)數(shù)器
    UINT8              TCBState;      //任務(wù)狀態(tài)       255為頭部   254尾部    0表示阻塞態(tài),1表示就緒態(tài),2表示掛起態(tài)

    INT8              *TCBName;       //任務(wù)名
    FUN                TCBTask;       //任務(wù)函數(shù)指針
    UINT8             *TCBStack;      //人工堆棧
    UINT8              TCBPrio;       //任務(wù)優(yōu)先級(jí)
    pTCB              *TCBHandler;    //任務(wù)句柄  也叫任務(wù)ID   

    UINT16             TCB_SP;        //任務(wù)當(dāng)前的SP指針 
}pTCB;

現(xiàn)在我們定義

pTCB *RdyTab[33];        //就緒查找表   0為空閑任務(wù)

我們現(xiàn)在思考:

RdyTab[33]的內(nèi)存分配結(jié)構(gòu)?

部分讀者會(huì)有第一反應(yīng)就是內(nèi)存結(jié)構(gòu)當(dāng)然是33個(gè)結(jié)構(gòu)體的大小。 如下:

其實(shí)上面是錯(cuò)誤的

因?yàn)橹罢f過,即使是結(jié)構(gòu)體指針數(shù)組,其數(shù)組的元素本質(zhì)上仍是指針,因此,其大小也只是一個(gè)四字節(jié)的地址單元,因此,其正確的結(jié)構(gòu)如下:

那有人會(huì)有疑惑,為啥

RdyTab[i]->TCBPrev等等,這些為什么存在呢?
其實(shí)這個(gè)并不存在,這里單純指RdyTab[i]的內(nèi)存單元中,而我們需要使用RdyTab[i]->TCBPrev等等
時(shí),必須先初始化RdyTab[i]的值,而這個(gè)RdyTab[i]->TCBPrev就是指初始化時(shí)指向內(nèi)存的首地址
偏移位置,這個(gè)工作是由編譯器完成的,如下圖所示!
截圖20230109091048.png

顯然當(dāng)我們使用RdyTab[i]->TCBPrev時(shí),其地址就是分配的結(jié)構(gòu)體所在的地址,而不是指針數(shù)組的地址。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 內(nèi)存
    +關(guān)注

    關(guān)注

    8

    文章

    3122

    瀏覽量

    75246
  • 指針
    +關(guān)注

    關(guān)注

    1

    文章

    484

    瀏覽量

    71184
  • 數(shù)組
    +關(guān)注

    關(guān)注

    1

    文章

    420

    瀏覽量

    26536
  • C指針
    +關(guān)注

    關(guān)注

    0

    文章

    10

    瀏覽量

    6482
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    C語言指針詳細(xì)解析

    可以對(duì)數(shù)據(jù)本身,也可以對(duì)存儲(chǔ)數(shù)據(jù)的變量地址進(jìn)行操作。 指針是一個(gè)占據(jù)存儲(chǔ)空間的實(shí)體在這一段空間起始位置的相對(duì)距離值。在C/C++語言中,指針一般被認(rèn)為是
    發(fā)表于 09-14 10:03

    C指針習(xí)題答案配C指針

    C指針習(xí)題答案配C指針
    發(fā)表于 09-07 14:29 ?6次下載
    <b class='flag-5'>C</b>和<b class='flag-5'>指針</b>習(xí)題答案配<b class='flag-5'>C</b>和<b class='flag-5'>指針</b>

    C語言指針解析

    第一章 指針的概念 指針是一個(gè)特殊的變量,它里面存儲(chǔ)的數(shù)值被解釋成為內(nèi)存里的一個(gè)地址。要搞清一個(gè)指針需要搞清指針的四方面的內(nèi)容:指針的類型,
    發(fā)表于 11-02 11:38 ?2次下載

    基于C語言中指針的基本用法解析

    C語言中其它的知識(shí)都學(xué)得可以,唯獨(dú)指針搞不懂。如果是這樣,我可以很負(fù)責(zé)的告訴你,對(duì)于這門編程語言,你等于是沒學(xué)。所以學(xué)好指針對(duì)于初學(xué)者是非常重要的?;蛟S你會(huì)覺得它有點(diǎn)抽象,但是當(dāng)你徹底理解了
    的頭像 發(fā)表于 01-09 15:12 ?5002次閱讀

    C語言中的“級(jí)指針”該如何理解

    在討論C語言指針時(shí),我一直在強(qiáng)調(diào)“將指針看作普通數(shù)據(jù)類型”,要是讀者能夠記住這一點(diǎn),在看到級(jí)指針時(shí),將其與其他普通數(shù)據(jù)類型對(duì)比分析,會(huì)發(fā)現(xiàn)
    發(fā)表于 07-31 16:58 ?1.3w次閱讀
    <b class='flag-5'>C</b>語言中的“<b class='flag-5'>二</b>級(jí)<b class='flag-5'>指針</b>”該如何理解

    C語言級(jí)指針的用法與原理

    提到指針,我們都知道指針是用來存儲(chǔ)一個(gè)變量的地址。所以,當(dāng)我們定義了一個(gè)指向指針指針的時(shí)候(pointer to pointer),我們也稱之為
    發(fā)表于 07-02 14:52 ?4151次閱讀
    <b class='flag-5'>C</b>語言<b class='flag-5'>二</b>級(jí)<b class='flag-5'>指針</b>的用法與原理

    從最底層的內(nèi)存存儲(chǔ)空間開始帶你了解C語言指針

    一、前言 、變量與指針的本質(zhì) 三、指針的幾個(gè)相關(guān)概念 四、指向不同數(shù)據(jù)類型的指針 五、總結(jié) 一、前言 如果問C語言中最重要、威力最大的概念
    的頭像 發(fā)表于 02-02 10:40 ?2713次閱讀
    從最<b class='flag-5'>底層</b>的內(nèi)存存儲(chǔ)空間開始帶你了解<b class='flag-5'>C</b>語言<b class='flag-5'>指針</b>

    簡(jiǎn)述C語言中什么是懸空指針和野指針

    提起C語言大部分開發(fā)者很自然就會(huì)想到指針字,沒錯(cuò),作為C的核心和靈魂,它的地位咱們就不再贅述了,今天我們想跟大家講的是指針中的兩個(gè)特有名詞
    的頭像 發(fā)表于 03-18 11:18 ?2651次閱讀

    C語言指針詳細(xì)解析

    可以對(duì)數(shù)據(jù)本身,也可以對(duì)存儲(chǔ)數(shù)據(jù)的變量地址進(jìn)行操作。 指針是一個(gè)占據(jù)存儲(chǔ)空間的實(shí)體在這一段空間起始位置的相對(duì)距離值。在C/C++語言中,指針一般被認(rèn)為是
    的頭像 發(fā)表于 11-14 16:53 ?2573次閱讀
    <b class='flag-5'>C</b>語言<b class='flag-5'>指針</b>詳細(xì)<b class='flag-5'>解析</b>

    C語言中的懸空指針和野指針是什么意思?

    提起C語言大部分開發(fā)者很自然就會(huì)想到指針字,沒錯(cuò),作為C的核心和靈魂,它的地位咱們就不再贅述了,今天我們想跟大家講的是指針中的兩個(gè)特有名詞
    的頭像 發(fā)表于 02-09 17:20 ?1414次閱讀

    底層解析C指針(一)

    指針C語言中的精髓部分,同樣也是C語言的難點(diǎn)所在,下面從最底層來分析C指針。
    的頭像 發(fā)表于 02-15 14:47 ?1154次閱讀
    <b class='flag-5'>底層</b><b class='flag-5'>解析</b><b class='flag-5'>C</b><b class='flag-5'>指針</b>(一)

    詳解C語言指針底層基本原理

    說到指針,估計(jì)還是有很多小伙伴都還是云里霧里的,有點(diǎn)“知其然,而不知其所以然”。但是,不得不說,學(xué)了指針C語言才能算是入門了。指針C語言
    的頭像 發(fā)表于 04-06 10:43 ?1766次閱讀

    C語言中一級(jí)指針、級(jí)指針和三級(jí)指針

    一級(jí)指針的用法其實(shí)是取數(shù)據(jù)的地址,以此類推,級(jí)指針就是取一級(jí)指針的地址,也可以表示一級(jí)指針的指向的內(nèi)容。
    發(fā)表于 05-19 17:30 ?2496次閱讀
    <b class='flag-5'>C</b>語言中一級(jí)<b class='flag-5'>指針</b>、<b class='flag-5'>二</b>級(jí)<b class='flag-5'>指針</b>和三級(jí)<b class='flag-5'>指針</b>

    C++智能指針底層實(shí)現(xiàn)原理

    C++智能指針的頭文件: #include 1. shared_ptr: 智能指針從本質(zhì)上來說是一個(gè)模板類,用類實(shí)現(xiàn)對(duì)指針對(duì)象的管理。 template class shared_pt
    的頭像 發(fā)表于 11-09 14:32 ?1072次閱讀
    <b class='flag-5'>C</b>++智能<b class='flag-5'>指針</b>的<b class='flag-5'>底層</b>實(shí)現(xiàn)原理

    C語言指針學(xué)習(xí)筆記

    本文從底層內(nèi)存分析,徹底讓讀者明白C語言指針的本質(zhì)。
    的頭像 發(fā)表于 11-05 17:40 ?639次閱讀
    <b class='flag-5'>C</b>語言<b class='flag-5'>指針</b>學(xué)習(xí)筆記