chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

底層解析C指針(二)

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

掃碼添加小助手

加入工程師交流群

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

對比以下兩個指針

int *p;

char *p;

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

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

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

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

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

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

截圖20230109091048.png

這個可能比較好理解

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

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

    UINT32             TCBDlyCount;   //延時計(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)先級
    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)?

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

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

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

那有人會有疑惑,為啥

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

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

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

    關(guān)注

    8

    文章

    3122

    瀏覽量

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

    關(guān)注

    1

    文章

    484

    瀏覽量

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

    關(guān)注

    1

    文章

    420

    瀏覽量

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

    關(guān)注

    0

    文章

    10

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

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

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

    可以對數(shù)據(jù)本身,也可以對存儲數(shù)據(jù)的變量地址進(jìn)行操作。 指針是一個占據(jù)存儲空間的實(shí)體在這一段空間起始位置的相對距離值。在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語言指針解析

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

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

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

    C語言中的“指針”該如何理解

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

    C語言指針的用法與原理

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

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

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

    簡述C語言中什么是懸空指針和野指針

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

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

    可以對數(shù)據(jù)本身,也可以對存儲數(shù)據(jù)的變量地址進(jìn)行操作。 指針是一個占據(jù)存儲空間的實(shí)體在這一段空間起始位置的相對距離值。在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ā)者很自然就會想到指針字,沒錯,作為C的核心和靈魂,它的地位咱們就不再贅述了,今天我們想跟大家講的是指針中的兩個特有名詞
    的頭像 發(fā)表于 02-09 17:20 ?1414次閱讀

    底層解析C指針(一)

    指針C語言中的精髓部分,同樣也是C語言的難點(diǎn)所在,下面從最底層來分析C指針。
    的頭像 發(fā)表于 02-15 14:47 ?1153次閱讀
    <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語言中一級指針、指針和三級指針

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

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

    C++智能指針的頭文件: #include 1. shared_ptr: 智能指針從本質(zhì)上來說是一個模板類,用類實(shí)現(xiàn)對指針對象的管理。 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í)筆記