在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

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

C語言固件中指針的使用方法

multisim ? 來源:21IC ? 作者:21IC ? 2020-09-26 11:38 ? 次閱讀

使用指針值

修改和取消引用指針

有兩個與指針關聯(lián)的值。第一個是存儲在指針本身中的存儲地址,第二個是存儲在該存儲地址中的數(shù)據(jù)。要修改存儲在指針變量中的地址,只需使用等號:

RxByte_ptr = 0x40;

復制代碼

要訪問存儲在指針地址處的數(shù)據(jù),請使用星號。這適用于閱讀和寫作。

ReceivedData = *RxByte_ptr; *TxByte_ptr = TransmitData;

復制代碼

訪問指針所指向的值稱為解引用,星號(與指針一起使用)稱為解引用運算符。

獲取變量的地址

與指針的使用有關的一個重要細節(jié)是C“地址”運算符。此符號為&。盡管&附加在普通變量而非指針上,但我仍將其視為“指針運算符”,因為它的使用與指針實現(xiàn)緊密相關。

當在變量名的前面加上&時,程序將使用變量的地址而不是變量的值。

即使您不知道特定變量將在內(nèi)存中的位置,這也使您可以將變量的地址放置在指針中。在以下代碼片段中演示了&運算符的用法,該代碼片段還用作基本指針用法的摘要。

《div id=“code_v2m”》

char displayChar; char TestingVariable; char *DisplayChar_ptr; DisplayChar = 0x41; DisplayChar_ptr = &DisplayChar; TestingVariable = *DisplayChar_ptr; *DisplayChar_ptr = 0x42; TestingVariable = DisplayChar;

復制代碼這是此代碼的逐步說明:

DisplayChar = 0x41;

復制代碼

現(xiàn)在,DisplayChar變量將保存與ASCII‘A’相對應的值。

DisplayChar_ptr = &DisplayChar;

復制代碼

指針(DisplayChar_ptr)現(xiàn)在保存變量DisplayChar的地址。我們不知道該地址是什么,即我們不知道DisplayChar_ptr中存儲的數(shù)字。此外,我們不需要知道;這是編譯器的業(yè)務,而不是我們的業(yè)務。

TestingVariable = *DisplayChar_ptr;

復制代碼

現(xiàn)在,TestingVariable保存DisplayChar變量的值,即0x41。

*DisplayChar_ptr = 0x42;

復制代碼

我們剛剛使用了指針來修改存儲在與DisplayChar變量對應的地址中的值;現(xiàn)在它具有0x42,即ASCII‘B’。

TestingVariable = DisplayChar;

復制代碼

現(xiàn)在,TestingVariable的值為0x42。

指針算術

TxByte = *(TxBuffer + 1); TxByte = TxBuffer[1];

復制代碼

在大多數(shù)情況下,C變量持有一個可以變化的值,指針變量也不例外。用于修改指針值的常見算術運算是加法(例如TxByte_ptr = TxByte_ptr + 4),減法(TxByte_ptr = TxByte_ptr-4),增量(TxByte_ptr ++)和減量(TxByte_ptr--)。只要兩個指針具有相同的數(shù)據(jù)類型,就可以從另一個指針中減去一個指針。但是,您不能將一個指針添加到另一指針。

指針算術并不像看起來那樣簡單。假設您有一個數(shù)據(jù)類型為long的指針。您正在調試一些代碼,當前正在單步執(zhí)行一個例程,該例程會重復遞增該指針。您在“監(jiān)視”窗口中注意到,指針的值不會隨著每次增加而增加一。這里發(fā)生了什么?

如果您不能輕易想到答案,則應該花更多的時間考慮指針的性質。此代碼中的指針與長變量(即占用四個字節(jié)內(nèi)存的變量)一起使用。當您增加指針時,您實際上并不希望指針的值增加一個內(nèi)存位置(在此假設內(nèi)存是按字節(jié)組織的)。而是,您希望它增加四個存儲位置,以便它指向下一個long變量。編譯器知道這一點,并相應地修改了指針的值。

當您向指針添加數(shù)字或從指針減去數(shù)字時,也會發(fā)生同樣的事情。指針中存儲的地址不一定會增加或減少該數(shù)字。相反,它將增加或減少該數(shù)字乘以指針數(shù)據(jù)類型的字節(jié)大小。

指針和數(shù)組

指針和數(shù)組密切相關。聲明數(shù)組時,實際上是在創(chuàng)建一個常量指針,該常量指針始終保存數(shù)組的起始地址,并且我們用來訪問數(shù)組元素的索引符號也可以與指針一起使用。

例如,假設您有一個名為TxBuffer的char指針,該指針當前保存地址0x30。以下代碼片段顯示了兩種等效的訪問地址0x31處數(shù)據(jù)的方式。

TxByte = *(TxBuffer + 1); TxByte = TxBuffer[1];

復制代碼

何時使用指針

在本節(jié)中,我想簡要討論兩種編碼情況,它們可以受益于指針的使用,并且與嵌入式應用程序特別相關。

指針與數(shù)組

從上一節(jié)的討論中可以很自然地得出第一個。指針提供了另一種處理以數(shù)組形式存儲的數(shù)據(jù)的方法。在給定例程的上下文中,指針方法可能更直觀或更方便。

但是,在某些情況下,基于指針的實現(xiàn)可以提高代碼速度。我的理解是,在編譯器高度復雜并且能夠進行如此廣泛的優(yōu)化之前,這在過去更為正確。不過,在嵌入式開發(fā)的背景下,我認為在某些情況下指針可以提供不可忽略的執(zhí)行速度改進。如果您確實試圖達到執(zhí)行給定代碼部分所需的最小時鐘周期數(shù),那么值得嘗試一下指針。

將指針傳遞給函數(shù)

功能的廣泛使用可幫助您編寫井井有條的模塊化代碼。這是一件好事,盡管C施加了在某些情況下可能很尷尬的限制:一個函數(shù)只能有一個返回值。換句話說,它只能修改一個變量,除非使用指針。

此技術的工作原理如下:

包括一個指針作為該函數(shù)的輸入之一。

使用&運算符將變量的地址傳遞給函數(shù)。

在函數(shù)內(nèi)部,變量的地址成為指針的值,并且函數(shù)使用解引用運算符修改原始變量的值。

即使原始變量沒有直接通過返回值進行修改,該函數(shù)之后的代碼也假定該變量的值已被修改。

這是一個例子:

#define STEPSIZE 3

char IncreaseCnt_and_CheckLED(char *Count)

{

*Count = *Count + STEPSIZE;

IF(LED == TRUE)

return TRUE;

else

return FALSE;

}

int main()

{

char RisingEdgeCount = 0;

char LED_State;

。..

。..

LED_State = IncreaseCnt_and_CheckLED(&RisingEdgeCount);

。..

。..

}

復制代碼

結論

我希望您現(xiàn)在對C語言固件中的指針以及如何開始使用它們有一個清晰的了解。

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

    關注

    180

    文章

    7614

    瀏覽量

    137401

原文標題:如何在C語言固件中使用指針

文章出處:【微信號:A1411464185,微信公眾號:multisim】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    C語言程序設計教程第4版第8講:指針

    C語言指針講解
    發(fā)表于 11-20 14:10 ?0次下載

    技術干貨驛站 ▏深入理解C語言:掌握C語言條件判斷,從if到switch的應用

    語句和條件運算符。這些結構不僅增強了代碼的靈活性,還提高了程序的可讀性和可維護性。本文將深入探討C語言中的主要條件判斷語句,包括它們的語法、使用方法及實際應用,通過
    的頭像 發(fā)表于 11-09 01:10 ?414次閱讀
    技術干貨驛站 ▏深入理解<b class='flag-5'>C</b><b class='flag-5'>語言</b>:掌握<b class='flag-5'>C</b><b class='flag-5'>語言</b>條件判斷,從if到switch的應用

    C語言指針學習筆記

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

    C語言指針運算符詳解

    C語言中,當你有一個指向數(shù)組中某個元素的指針時,你可以對該指針執(zhí)行某些算術運算,例如加法或減法。這些運算可以用來遍歷數(shù)組中的元素,如ptr[i]等價于*(ptr + i)。然而,如果
    的頭像 發(fā)表于 10-30 11:16 ?293次閱讀

    C語言關鍵字--typedef

    C語言關鍵字使用方法學習指南!
    的頭像 發(fā)表于 10-07 12:44 ?319次閱讀

    C語言指針詳細解析

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

    指定初始器的使用方法及優(yōu)點

    隨著C語言的發(fā)展,C99標準引入了一些新的特性,極大地方便了程序員的編碼工作。其中一個非常實用且強大的功能便是“指定初始器”(Designated Initializers)。在這篇文章中,我們將深入探討指定初始器的
    的頭像 發(fā)表于 08-29 09:51 ?343次閱讀

    面試中的高頻問題:指針函數(shù)與函數(shù)指針,你能完美應對嗎?

    一直覺得C語言較其他語言最偉大的地方就是C語言中的指針,有些人認為
    的頭像 發(fā)表于 06-22 08:11 ?1811次閱讀
    面試中的高頻問題:<b class='flag-5'>指針</b>函數(shù)與函數(shù)<b class='flag-5'>指針</b>,你能完美應對嗎?

    Keil+C51中對雙數(shù)據(jù)指針的直接利用

    Keil+C51中對雙數(shù)據(jù)指針的直接利用
    發(fā)表于 06-18 10:15 ?0次下載

    手柄控制代碼及使用方法

    手柄控制代碼及使用方法
    的頭像 發(fā)表于 05-15 10:19 ?2016次閱讀

    指針式萬用表的使用方法與注意事項

    ,從而測出電路中的電流、電壓和電阻等參數(shù)。本文將詳細介紹指針式萬用表的使用方法和注意事項,幫助讀者更好地掌握這一工具。
    的頭像 發(fā)表于 05-14 18:04 ?2901次閱讀

    指針式萬用表的使用方法

    在使用指針式萬用表之前,需要觀察萬用表的指針是否與零刻度線對齊和重合。如果不重合,就需要進行調零操作,否則會影響讀數(shù),使測量結果不準確。調零操作包括機械調零和歐姆調零。機械調零是通過調整表盤中間
    的頭像 發(fā)表于 05-09 18:23 ?1982次閱讀

    提高C代碼可讀性的編寫技巧與策略

    指針C 語言的靈魂,是 C 比其他語言更靈活,更強大的地方。所以學習 C
    發(fā)表于 04-23 18:25 ?552次閱讀

    C語言函數(shù)指針六大應用場景詳解

    函數(shù)指針是一種非常強大的編程工具,它可以讓我們以更加靈活的方式編寫程序。在本文中,我們將介紹 6 個函數(shù)指針的高級應用場景,并貼出相應的代碼案例和解釋。
    的頭像 發(fā)表于 04-23 18:19 ?941次閱讀

    C語言指針用法

    C語言編程中善用指針可以簡化一些任務的處理,而對于一些任務(比如動態(tài)內(nèi)存分配),必須要有指針才行的。也就是說精通C
    發(fā)表于 03-05 14:22 ?383次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>的<b class='flag-5'>指針</b>用法
    主站蜘蛛池模板: 不卡视频一区| 日韩一级片视频| www午夜| 男女互插小说| 日韩亚洲人成在线综合日本| 天天操夜夜拍| 99久久99久久久99精品齐| 国精视频一区二区视频| 欧美日韩亚洲色图| 四虎永久在线精品国产| 国产高清在线精品| 视频免费在线| 亚洲精品久久久久午夜| 都市激情 亚洲| 国产免费人人看大香伊| 精品国产综合区久久久久99| 女人被男人免费播放网站| 日本福利片午夜免费观着| 色香视频一sxmv首页| 四虎影视色费永久在线观看| 性色在线视频精品| 一级做a爱过程免费视| 饥渴少妇videos| 免费在线不卡视频| 亚洲视频你懂的| 亚洲三级黄色| 色婷婷激情综合| 日韩网| 日本怡红| 拍拍拍拍拍拍拍无挡大全免费| 日本黄色片www| 国模谢心2013.05.06私拍| 五月天婷婷在线观看视频| 天天摸天天草| 天天草b| 亚洲欧美啪啪| 亚洲综合一二三区| 特黄特a级特别特级特毛片| 男女免费观看视频| 四虎国产精品永久在线播放| 久久国产精品99精品国产987 |