色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

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

STM32嵌入式開發 ? 來源:STM32嵌入式開發 ? 作者:STM32嵌入式開發 ? 2022-07-06 15:17 ? 次閱讀

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

要用C語言的思維方式來進行程序的構架構建

要有良好的C語言算法基礎,以此來實現程序的邏輯構架

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

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

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

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

用C語言的思維方式進行程序構架構建

程序分為三大部分:

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

b、數據運算,需要從一堆數據中剔除相應的數據,注意邏輯的正確;

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

用C語言進行邏輯實現

a、 數據獲取,通過printf和scanf進行參數的獲取。

/* 讀入問題條件 */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語句就是異常情況的判斷,每種異常情況對應不同的返回值,這樣便于程序過程的調試和數據的合法性。

b、 /* 定義鏈表節點類型 */

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

構建循環鏈表進行“猴子”的圓圈建設。

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

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

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

c、 /* 找到第 k 個節點 */

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

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

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

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

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

b、 猴子查數。

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

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

the last num:[%d] 

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

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

使用C語言的指針

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

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

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

指針的優勢,或許在本程序中表現的不明顯,在大量數據和對操作速度要求比較敏感的情況下會很明顯,比如Linux內核中,就會有很好的體現。

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

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

文章出處:【微信公眾號:STM32嵌入式開發】歡迎添加關注!文章轉載請注明出處。

審核編輯:彭靜

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數據
    +關注

    關注

    8

    文章

    7067

    瀏覽量

    89107
  • C語言
    +關注

    關注

    180

    文章

    7605

    瀏覽量

    136993
  • 硬件電路
    +關注

    關注

    39

    文章

    243

    瀏覽量

    29241

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

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

收藏 人收藏

    評論

    相關推薦

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

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

    C語言指針學習筆記

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

    C語言指針運算符詳解

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

    如何在Excel中靈活運用SUMIF函數

    。 criteria :定義哪些單元格將被加總的條件。 sum_range :(可選)實際要加總的單元格區域。如果省略, range 將被用作 sum_range 。 示例: 假設你有一個銷售數據表,A列是日期,B列是產品名稱,C列是銷售額。你想
    的頭像 發表于 10-30 09:53 ?320次閱讀

    C語言與其他編程語言的比較

    C語言作為一種歷史悠久的編程語言,自其誕生以來,一直在軟件開發領域扮演著重要角色。它以其高效、靈活和可移植性強的特點,成為了系統級編程的首選語言
    的頭像 發表于 10-29 17:30 ?293次閱讀

    C語言指針詳細解析

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

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

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

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

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

    C語言函數指針六大應用場景詳解

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

    CCLink轉EtherCAT網關在制袋機生產中的靈活運用

    在制袋機生產中,為了實現高效、精準的控制,許多廠家開始采用工業互聯網技術。其中,開疆CCLink轉EtherCAT網關成為了實現這一目標的關鍵設備。本文將詳細介紹CCLink轉EtherCAT網關在制袋機生產中的靈活運用
    的頭像 發表于 03-26 17:30 ?572次閱讀
    CCLink轉EtherCAT網關在制袋機生產中的<b class='flag-5'>靈活運用</b>

    CCLink轉EtherCAT網關在制袋機生產中的靈活運用

    在制袋機生產中,為了實現高效、精準的控制,許多廠家開始采用工業互聯網技術。其中,開疆CCLink轉EtherCAT網關成為了實現這一目標的關鍵設備。本文將詳細介紹CCLink轉EtherCAT網關在制袋機生產中的靈活運用
    的頭像 發表于 03-26 17:29 ?482次閱讀
    CCLink轉EtherCAT網關在制袋機生產中的<b class='flag-5'>靈活運用</b>

    C語言基礎-為什么要使用C

    當今最流行的 Linux 操作系統和 RDBMS(Relational Database Management System:關系數據庫管理系統) MySQL 都是使用 C 語言編寫的。
    發表于 03-25 11:20 ?451次閱讀

    C語言指針用法

    C語言編程中善用指針可以簡化一些任務的處理,而對于一些任務(比如動態內存分配),必須要有指針才行的。也就是說精通C
    發表于 03-05 14:22 ?361次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>的<b class='flag-5'>指針</b>用法

    c語言,c++,java,python區別

    C語言C++、Java和Python是四種常見的編程語言,各有優點和特點。 C語言
    的頭像 發表于 02-05 14:11 ?2429次閱讀

    結構體與指針的關系

    C語言中,結構體(Struct)是一種用戶自定義的數據類型,它允許您將不同類型的數據項組合在一起,以便形成一個更復雜的數據結構。結構體可以包含多個成員變量,每個成員變量可以是不同的數據類型。而結構
    的頭像 發表于 01-11 08:00 ?1008次閱讀
    結構體與<b class='flag-5'>指針</b>的關系
    主站蜘蛛池模板: 国产精品视频yy9099| 久久精品影院永久网址| 嫩草影院一区| 久久婷婷国产五月综合色啪最新| 伊人影院中文字幕| 国产精品成人在线播放| 亚洲不卡视频在线观看| 久久婷婷国产五月综合色啪最新| 99视频精品全部免费观看| 麻豆产精品一二三产区区| 99久久亚洲| 我要搞av| 久久欧洲AV无码精品色午夜麻豆| qq快播电影网| 性色无码AV久久蜜臀| 麻豆国产精品AV色拍综合| 动漫人物差差差30分钟免费看| 蜜桃传媒在线观看| 高清午夜福利电影在线| 亚洲欧美高清在线精品一区| 国产亚洲国际精品福利| 中文字幕亚洲无线码高清不卡| 日本久久精品视频| 好紧好湿太硬了我太爽了小说| 99热只有精品| 亚洲精品国产SUV| 红桃视频国产AV| aaaaaaa一级毛片| 亚洲免费大全| 色吧最新网址| 国内偷拍夫妻av| 99精品视频在线观看| 武汉美女洗澡| 秋霞在线看片无码免费| 狠狠狠狠狠狠干| 丰满少妇69激情啪啪无码| 中文字幕精品无码一区二区| 我要搞av| 色欲AV亚洲永久无码精品| 伦理片qvod| 紧缚束缚调教丨vk|