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

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

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

淺析C語(yǔ)言中的變量修飾符

朱老師物聯(lián)網(wǎng)大講堂 ? 2024-04-15 08:10 ? 次閱讀

一、修飾符類型


51單片機(jī)采用哈佛結(jié)構(gòu)。內(nèi)存空間編址有重疊??梢栽诓煌偩€上定義不同的變量。在KEIL C51中定義了data、idata、xdata、code幾種域修飾符。這些修飾符決定了變量訪問方式。

data:固定指前面0x00-0x7F的128個(gè)RAM,可以用acc直接讀寫,速度最快,生成的代碼也最小。

idata:固定指前面0x00-0xFF的256個(gè)RAM,其中前128和data的128完全相同,只是訪問的方式不同。

xdata:外部擴(kuò)展RAM。

code:ROM。

920b97e6-fabc-11ee-9118-92fbcf53809c.png

92020730-fabc-11ee-9118-92fbcf53809c.png

二、變量定義


對(duì)變量進(jìn)行聲明時(shí)可以指定變量的存儲(chǔ)類型如:uchar data x和data uchar x相等,都是在片內(nèi)RAM區(qū)分配一個(gè)字節(jié)的空間。

同樣對(duì)于指針變量的聲明,因涉及到指針變量本身的存儲(chǔ)位置和指針?biāo)赶虻拇鎯?chǔ)位置不同而進(jìn)行相應(yīng)的存儲(chǔ)區(qū)類型關(guān)鍵字的聲明。

如下一句代碼,表示的是:指在RAM區(qū)分配一個(gè)指針變量(“*”號(hào)后的關(guān)鍵字的作用),而且這個(gè)指針本身指向xdata區(qū)(“*”前xdata關(guān)鍵字的作用)

921610b8-fabc-11ee-9118-92fbcf53809c.png

92020730-fabc-11ee-9118-92fbcf53809c.png

三、指針變量與存儲(chǔ)區(qū)域關(guān)系


定義如下變量:

9225e24a-fabc-11ee-9118-92fbcf53809c.png

第一種情況:是指在片內(nèi)RAM分配一個(gè)指針變量(“*”號(hào)后的data關(guān)鍵字的作用),而且這個(gè)指針本身指向xdata區(qū)(“*”前xdata關(guān)鍵字的作用)。這種定義方式訪問效率最高。

922d1e70-fabc-11ee-9118-92fbcf53809c.png

第二種情況:是指在idata區(qū)域分配一個(gè)指針變量,指針變量指向xdata區(qū)域。這種訪問效率不如第一種。

9233a22c-fabc-11ee-9118-92fbcf53809c.png

第三種情況:是指在xdata區(qū)域分配一個(gè)指針變量,指針變量指向xdata區(qū)域。這種訪問效率不如第二種。

923a94a6-fabc-11ee-9118-92fbcf53809c.png

第四種情況:這種定義方式是錯(cuò)誤,該指針變量只能訪問data區(qū)域,無(wú)法訪問xdata區(qū)域。

9248eb1e-fabc-11ee-9118-92fbcf53809c.png

聲明:本文內(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)投訴
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    180

    文章

    7605

    瀏覽量

    136934
  • 變量
    +關(guān)注

    關(guān)注

    0

    文章

    613

    瀏覽量

    28388
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    C語(yǔ)言中賦值運(yùn)算詳解

    C語(yǔ)言中,賦值運(yùn)算用于將一個(gè)值賦給變量。
    發(fā)表于 08-18 16:38 ?2041次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言中</b>賦值運(yùn)算<b class='flag-5'>符</b>詳解

    “無(wú)注冊(cè)”修飾符如何防止變量被保存到CPU寄存器中?

    好的,我的意思是,我希望真正的內(nèi)存位置(無(wú)論是全局的還是本地的,不是基于堆棧的,變量)都要更新,所以當(dāng)中斷發(fā)生時(shí),它會(huì)找到一個(gè)更新的值。我知道“寄存器”修飾符,但它正好相反。F我想做什么,我在文檔中
    發(fā)表于 10-09 11:09

    請(qǐng)問什么是正則表達(dá)式修飾符?

    什么是正則表達(dá)式的修飾符?
    發(fā)表于 11-04 06:10

    c語(yǔ)言中整數(shù)的取值范圍是多少

    c語(yǔ)言中整數(shù)的取值范圍,文章目錄1、整數(shù)的取值范圍2、版權(quán)聲明整數(shù)是我們生活中常用的數(shù)據(jù)類型,也是編程中常用的一種數(shù)據(jù),C語(yǔ)言使用int關(guān)鍵字來定義整數(shù)
    發(fā)表于 07-20 07:50

    C51語(yǔ)言變量定義方式

    C51 語(yǔ)言變量定義定義方式:普通變量:(修飾符)數(shù)據(jù)類型 [存儲(chǔ)類型] 變量名 [= 值]指
    發(fā)表于 12-01 06:18

    HAL庫(kù)中__weak修飾符是什么?

    單片機(jī)系統(tǒng)時(shí)鐘是什么?HAL庫(kù)中__weak修飾符是什么?
    發(fā)表于 02-23 07:32

    探討一下C語(yǔ)言中的作用域局部變量

    作用域局部變量--local variable全局變量--global variable修飾符--storage description局部變量–local variable一般在{}
    發(fā)表于 02-28 06:00

    C語(yǔ)言中的volatile關(guān)鍵字

    volatile關(guān)鍵字是一種類型修飾符,用它聲明的類型變量表示可以被某些編譯器未知的因素更改。
    發(fā)表于 05-27 09:32 ?3275次閱讀

    C語(yǔ)言類型修飾符Const的教程使用說明

    Const也是應(yīng)該廣泛的關(guān)鍵字,表示后面定義有可能是一個(gè)不變的常量,但是跟各種數(shù)據(jù)類型定義組合,能演變出復(fù)雜含義。常類型是指使用類型修飾符const說明的類型,常類型的變量或?qū)ο蟮闹凳遣荒鼙桓?/div>
    的頭像 發(fā)表于 09-20 09:37 ?3111次閱讀

    C語(yǔ)言類型修飾符Volatile的使用說明

    C語(yǔ)言是我們經(jīng)常需要用到的語(yǔ)言C語(yǔ)言中的類型修飾符Volatile大家知道怎么使用嗎? vol
    的頭像 發(fā)表于 09-19 10:54 ?3552次閱讀

    一種修飾符能使變量在處理器復(fù)位而不被初始化

    有一種修飾符能使變量在處理器復(fù)位而不被初始化
    的頭像 發(fā)表于 03-14 15:01 ?4041次閱讀
    一種<b class='flag-5'>修飾符</b>能使<b class='flag-5'>變量</b>在處理器復(fù)位而不被初始化

    C51 單片機(jī)的 C 語(yǔ)言中變量定義與硬件之間的關(guān)系

    C51 語(yǔ)言變量定義定義方式:普通變量:(修飾符)數(shù)據(jù)類型 [存儲(chǔ)類型] 變量名 [= 值]指
    發(fā)表于 11-23 16:51 ?3次下載
    <b class='flag-5'>C</b>51 單片機(jī)的 <b class='flag-5'>C</b> <b class='flag-5'>語(yǔ)言中</b>的<b class='flag-5'>變量</b>定義與硬件之間的關(guān)系

    C語(yǔ)言中變量的作用域

    作用域局部變量--local variable全局變量--global variable修飾符--storage description局部變量–local variable一般在{}
    發(fā)表于 01-13 14:58 ?0次下載
    <b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言中</b><b class='flag-5'>變量</b>的作用域

    Java四種訪問修飾符及訪問范圍

    public修飾的類、類屬變量及方法,包內(nèi)及包外的任何類均可以訪問;任何情況下都可以訪問;如果一個(gè)類、類屬變量及方法沒有用任何修飾符,則其訪問權(quán)限為默認(rèn)權(quán)限,只認(rèn)包。同包下可以訪問,同
    的頭像 發(fā)表于 02-28 14:35 ?6651次閱讀

    快速掌握C語(yǔ)言關(guān)鍵字

    C語(yǔ)言中的32個(gè)關(guān)鍵字你知道多少個(gè)呢?根據(jù)關(guān)鍵字的作用分為四類:數(shù)據(jù)類型關(guān)鍵字、控制語(yǔ)句關(guān)鍵字、存儲(chǔ)類型關(guān)鍵字和其它關(guān)鍵字。1.1基本數(shù)據(jù)類型int:用于聲明整數(shù)類型的變量。char:用于聲明字符
    的頭像 發(fā)表于 07-06 08:04 ?355次閱讀
    快速掌握<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>關(guān)鍵字