日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

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

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

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

如何靈活運用C語言的指針操作

STM32嵌入式開發(fā) ? 來源:STM32嵌入式開發(fā) ? 作者:STM32嵌入式開發(fā) ? 2022-07-06 15:17 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

作為嵌入式工程師,怎么寫出效率高、思路清晰的C語言程序呢?

要用C語言的思維方式來進行程序的構(gòu)架構(gòu)建

要有良好的C語言算法基礎(chǔ),以此來實現(xiàn)程序的邏輯構(gòu)架

靈活運用C語言的指針操作

雖然看起來以上的說法很抽象,給人如墜霧里的感覺,其實就是用C語言進行遇到問題、分析問題和解決問題的過程。

嵌入式工程師在編寫C語言程序的時候,要針對遇到的問題進行程序構(gòu)架構(gòu)建。

比如我們要處理“猴子選大王”的經(jīng)典問題:一群猴子,手拉手排成一個圓,從任意一只猴子開始從1開始報數(shù),當(dāng)遇到要排除的數(shù)(預(yù)先設(shè)定)時該猴子退出該圈,從下一只猴子開始繼續(xù)從1報數(shù),如此反復(fù),最終剩下的猴子便是猴子的大王。

用C語言的思維方式進行程序構(gòu)架構(gòu)建

程序分為三大部分:

a、數(shù)據(jù)獲取,為了程序的運行,上面的問題要獲得猴子的總數(shù),從那只猴子開始和剔除的個數(shù);

b、數(shù)據(jù)運算,需要從一堆數(shù)據(jù)中剔除相應(yīng)的數(shù)據(jù),注意邏輯的正確;

c、提高程序的運行速率,少用循環(huán)多用指針。

用C語言進行邏輯實現(xiàn)

a、 數(shù)據(jù)獲取,通過printf和scanf進行參數(shù)的獲取。

/* 讀入問題條件 */printf("input total num:");scanf("%d", &n);printf("from which num begin:");scanf("%d", &k);if(k>n||k==0){printf("please input the right begin num");return 1; }printf("input the out num:");scanf("%d", &m);if(m>n||m==0){ printf("please input the right del num");return 2; }

同時注意異常時的處理,比如上面兩個if語句就是異常情況的判斷,每種異常情況對應(yīng)不同的返回值,這樣便于程序過程的調(diào)試和數(shù)據(jù)的合法性。

b、 /* 定義鏈表節(jié)點類型 */

typedef struct node{int data;struct node *next;}linklist;

構(gòu)建循環(huán)鏈表進行“猴子”的圓圈建設(shè)。

515d7896-e645-11ec-ba43-dac502259ad0.png

通過該步驟后,head和p(present)都成了一個“猴子圈”的鏈表。在該鏈表的構(gòu)建過程中需要注意一下幾點:內(nèi)存的開辟,此時遵守使用多少開辟多少的原則。

如果一下開辟過多,會引起內(nèi)存泄露的問題,但是,這個小程序是不會遇到這種問題了。其次是熟悉循環(huán)鏈表的構(gòu)建方法:鏈表的尾巴指向鏈表的頭。這個時候有心的話還會聯(lián)想到雙向鏈表的情況。

c、 /* 找到第 k 個節(jié)點 */

p=head;for (i = 1; i <= k; i++){p = p->next;}

找到從第幾個位置開始計數(shù)。此時,p指向開始的“猴子”。因為采用了鏈表方法,這個過程只需要關(guān)注p指針的next指向即可。

a、 保存初始的“猴子”圓圈參數(shù)。

/* 保存節(jié)點總數(shù) */
total = n;printf("
the out num:");q = head;

為什么要保留這個呢?首先要控制猴子數(shù)目,所以保留了全部的數(shù)目。其次用q(qurry)來保留剔除猴子前面的鏈表,并連接剔除猴子后的鏈表。這樣,完成了循環(huán)鏈表的元素刪除。

b、 猴子查數(shù)。

猴子查數(shù)是整個程序的關(guān)鍵,需要完成以下任務(wù):a、找到開始的“猴子”數(shù);b、刪除該“猴子”;c、將刪除掉的循環(huán)鏈表首尾連接起來。

/* 只剩一個節(jié)點時停止循環(huán) */while (total != 1){/* 報數(shù)過程,p指向要刪除的節(jié)點 */for (i = 1; i < m; i++){p = p->next;}/* 打印要刪除的節(jié)點序號 */printf("[%d] ", p->data);/* q 指向 p 節(jié)點的前驅(qū) */while (q->next != p){q = q->next;}/* 刪除 p 節(jié)點 */q->next = p->next;/* 保存被刪除節(jié)點指針 */s = p;/* p 指向被刪除節(jié)點的后繼 */p = p->next;/* 釋放被刪除的節(jié)點 */free(s);/* 節(jié)點個數(shù)減一 */total--;}/* 打印最后剩下的節(jié)點序號 */printf("

the last num:[%d] 

", p->data);free(p);}

通過以上數(shù)據(jù)運算,可以完成相應(yīng)鏈表元素的刪除,這或許就是C語言程序的魅力所在。

使用C語言的指針

比如本程序的鏈表指針的定義,p,s,q。

linklist *head, *p, *s, *q;

我們知道,指針操作不但可以減少數(shù)據(jù)操作需要的內(nèi)存,還可以提高程序的運行速度。

指針的優(yōu)勢,或許在本程序中表現(xiàn)的不明顯,在大量數(shù)據(jù)和對操作速度要求比較敏感的情況下會很明顯,比如Linux內(nèi)核中,就會有很好的體現(xiàn)。

總之,對于嵌入式工程師,不但能設(shè)計出好的硬件電路,如果也能寫出好的軟件程序就會讓我們的生活更加美好。

原文標(biāo)題:嵌入式工程師,用好C語言這一利器的三要素

文章出處:【微信公眾號:STM32嵌入式開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

審核編輯:彭靜

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

    關(guān)注

    8

    文章

    7349

    瀏覽量

    95062
  • C語言
    +關(guān)注

    關(guān)注

    183

    文章

    7646

    瀏覽量

    146208
  • 硬件電路
    +關(guān)注

    關(guān)注

    39

    文章

    268

    瀏覽量

    30378

原文標(biāo)題:嵌入式工程師,用好C語言這一利器的三要素

文章出處:【微信號:c-stm32,微信公眾號:STM32嵌入式開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

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

    C++ 11 14 17 20內(nèi)存管理-指針、智能指針和內(nèi)存池基礎(chǔ)與提升

    大模型在云端吞吐著海量數(shù)據(jù),當(dāng)自動駕駛汽車在毫秒間做出生死決策,我們不得不重新審視支撐這一切數(shù)字大廈的基石——C++內(nèi)存管理。盡管高級語言層出不窮,但在對性能、延遲和資源控制有著極致要求的底層核心領(lǐng)域,C++依然是無可爭議的王者
    的頭像 發(fā)表于 04-20 15:51 ?557次閱讀

    手把手教你學(xué)51單片機-C語言

    的講解單片機技術(shù)和C語言編程技巧外,更重要的是結(jié)合了多個模塊,以實際工程項目的編程規(guī)則來逐步帶領(lǐng)大家學(xué)習(xí)實際開發(fā)中的電路設(shè)計和編程思路。尤其是C語言
    發(fā)表于 03-05 11:47

    指針與函數(shù)詳解

    很熟悉,就成了“騷操作”,雖然不影響運行,但是降低代碼的可閱讀性。 3、typedef的引入C語言中typedef關(guān)鍵字作用:復(fù)雜的聲明定義簡單的別名,很明顯我們上面講述的函數(shù)指針就是
    發(fā)表于 01-23 06:02

    C語言重點—指針

    C語言是比較偏底層的語言,為什么他比較偏底層,就是因為他的很多操作都是直接針對內(nèi)存操作的。 這篇我們就來講解
    發(fā)表于 01-22 08:23

    請教一個C語言指針問題,求解答

    C語言指針,多多少少還是有些難度的,容易有些混淆。 請教大家下面的這個表達式是啥意思呢? short (*p)[size] = (short (*)[size])0x8ff00000; 是否為在0x8ff00000地址處分
    發(fā)表于 01-12 08:14

    C語言指針p、*p、&amp;p、*&amp;p、&amp;*p分別代表什么

    C語言中,指針是非常重要的概念。指針是一個變量,其值為另一個變量的地址。使用指針可以直接訪問內(nèi)存中的數(shù)據(jù),這使得
    發(fā)表于 01-07 07:34

    C語言主要特點

    指針類型數(shù)據(jù),使用十分靈活和多樣化,能用來實現(xiàn)各種復(fù)雜的數(shù)據(jù)結(jié)構(gòu)(如鏈表、樹、棧等)的運算。 4.具有結(jié)構(gòu)化的控制語句。用函數(shù)作為程序的模塊單位,便于實現(xiàn)程序的模塊化。C語言是完全模塊
    發(fā)表于 01-05 07:41

    C語言函數(shù)指針的六個高級的應(yīng)用場景

    函數(shù)指針是一種非常強大的編程工具,它可以讓我們以更加靈活的方式編寫程序。在本文中,我們將介紹 6 個函數(shù)指針的高級應(yīng)用場景,并貼出相應(yīng)的代碼案例和解釋。 回調(diào)函數(shù) 回調(diào)函數(shù)是指在某個事件發(fā)生時被
    發(fā)表于 01-04 12:25

    C語言嵌入式系統(tǒng)編程注意事項-內(nèi)存操作

    C語言嵌入式系統(tǒng)編程注意事項之內(nèi)存操作 在嵌入式系統(tǒng)的編程中,常常要求在特定的內(nèi)存單元讀寫內(nèi)容,匯編有對應(yīng)的MOV指令,而除C/C++以外的
    發(fā)表于 01-04 07:31

    C語言回調(diào)函數(shù)原來這么簡單

    ” 這個概念,它是回調(diào)函數(shù)能夠?qū)崿F(xiàn)的重要基礎(chǔ)。 1、函數(shù)指針學(xué)習(xí)過C語言的伙伴都知道,C語言中的靈魂 —
    發(fā)表于 12-30 06:45

    請問如何實現(xiàn)C語言訪問MCU寄存器?

    單片機的特殊功能寄存器SFR,是SRAM地址已經(jīng)確定的SRAM單元,在C語言環(huán)境下對其訪問歸納起來有兩種方法。 采用標(biāo)準(zhǔn)C的強制類型轉(zhuǎn)換和指針來實現(xiàn)   采用標(biāo)準(zhǔn)
    發(fā)表于 12-26 07:00

    C語言特性

    根據(jù)硬件的差異對少量的底層驅(qū)動代碼進行調(diào)整,大大降低了開發(fā)成本和周期。 3、靈活性:底層操作的能手 C 語言支持對底層硬件的直接操作,賦
    發(fā)表于 11-24 07:01

    C語言和單片機C語言有什么差異

    語言的功能特性外,它可以很好的操作底層的硬件接口。在C語言的基礎(chǔ)上,如果你把一些單片機的端口或特殊功能寄存器加于定義,使用的時候會更加方便,寫語句的時候,直接直觀的編寫。這樣就差不多是
    發(fā)表于 11-14 07:55

    靈活高效ZBUFF — C內(nèi)存數(shù)據(jù)操作庫:優(yōu)化內(nèi)存管理的利器

    C語言開發(fā)中,高效的內(nèi)存管理是提升程序性能的關(guān)鍵。ZBUFF作為一款靈活高效的內(nèi)存數(shù)據(jù)操作庫,通過優(yōu)化內(nèi)存分配與釋放機制,為開發(fā)者提供了更簡潔、更安全的API接口,極大地簡化了復(fù)雜數(shù)
    的頭像 發(fā)表于 08-14 18:01 ?833次閱讀
    <b class='flag-5'>靈活</b>高效ZBUFF — <b class='flag-5'>C</b>內(nèi)存數(shù)據(jù)<b class='flag-5'>操作</b>庫:優(yōu)化內(nèi)存管理的利器

    靈活高效雙引擎驅(qū)動:ZBUFF讓C語言內(nèi)存操作更智能!

    高性能系統(tǒng)。 一、ZBUFF核心庫常用函數(shù) 如果小伙伴們此前沒有接觸過C語言或者不精通C語言,把ZBUFF核心庫當(dāng)成新庫來學(xué)習(xí)即可,建議先從熟悉相關(guān)函數(shù)的功能及其參數(shù)意義入手。 感興趣
    的頭像 發(fā)表于 08-11 13:27 ?749次閱讀
    <b class='flag-5'>靈活</b>高效雙引擎驅(qū)動:ZBUFF讓<b class='flag-5'>C</b><b class='flag-5'>語言</b>內(nèi)存<b class='flag-5'>操作</b>更智能!
    唐海县| 蓝田县| 沅江市| 社会| 凉城县| 高尔夫| 定南县| 会宁县| 双桥区| 连云港市| 灌阳县| 永善县| 武城县| 随州市| 明光市| 梓潼县| 邓州市| 鄱阳县| 南宫市| 阿克陶县| 安西县| 巧家县| 彭泽县| 绍兴县| 梁山县| 浦城县| 牡丹江市| 喀喇| 高唐县| 额尔古纳市| 大洼县| 浙江省| 大城县| 静乐县| 迭部县| 宜兴市| 玛纳斯县| 哈密市| 县级市| 麟游县| 襄垣县|