一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

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

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

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

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

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

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

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

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

程序分為三大部分:

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

b、數(shù)據(jù)運算,需要從一堆數(shù)據(jù)中剔除相應的數(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語句就是異常情況的判斷,每種異常情況對應不同的返回值,這樣便于程序過程的調(diào)試和數(shù)據(jù)的合法性。

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

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

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

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

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

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

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

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

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

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

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

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

b、 猴子查數(shù)。

猴子查數(shù)是整個程序的關鍵,需要完成以下任務: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é)點的前驅 */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ù)運算,可以完成相應鏈表元素的刪除,這或許就是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)。

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

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

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

審核編輯:彭靜

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

    關注

    8

    文章

    7250

    瀏覽量

    91506
  • C語言
    +關注

    關注

    180

    文章

    7630

    瀏覽量

    140971
  • 硬件電路
    +關注

    關注

    39

    文章

    253

    瀏覽量

    29732

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

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

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    深入理解C語言C語言循環(huán)控制

    改變程序的執(zhí)行流程,使代碼更加靈活和可控。本文將詳細介紹這些語句的作用及其應用場景,并通過示例代碼進行說明。Part.1break語句C語言中break語句有兩種
    的頭像 發(fā)表于 04-29 18:49 ?1008次閱讀
    深入理解<b class='flag-5'>C</b><b class='flag-5'>語言</b>:<b class='flag-5'>C</b><b class='flag-5'>語言</b>循環(huán)控制

    函數(shù)指針的六個常見應用場景

    函數(shù)指針在嵌入式開發(fā)中有著廣泛的應用,它讓代碼更加靈活,減少冗余,提高可擴展性。很多時候,我們需要根據(jù)不同的情況動態(tài)調(diào)用不同的函數(shù),而函數(shù)指針正是實現(xiàn)這一需求的重要工具。本文將介紹六個常見的函數(shù)
    的頭像 發(fā)表于 04-07 11:58 ?422次閱讀
    函數(shù)<b class='flag-5'>指針</b>的六個常見應用場景

    為什么學了C語言,卻寫不出像樣的項目?

    在學習編程的路上,C語言幾乎是每個程序員的“必修課”。不管你是打算從事嵌入式開發(fā)、系統(tǒng)編程,還是想要深入理解操作系統(tǒng)的底層原理,C語言都是一
    的頭像 發(fā)表于 03-14 17:37 ?396次閱讀
    為什么學了<b class='flag-5'>C</b><b class='flag-5'>語言</b>,卻寫不出像樣的項目?

    全套C語言培訓資料—PPT課件

    全套C語言培訓資料,共427頁,13個章節(jié):C語言概述、程序的靈魂—算法、數(shù)據(jù)類型 & 運算符與表達式、順序程序設計、選擇結構程序設計、循環(huán)控制、數(shù)組、函數(shù)、預處理命令、
    發(fā)表于 03-12 14:50

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

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

    C語言指針學習筆記

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

    ARM開發(fā)板編程語言選擇

    隨著物聯(lián)網(wǎng)(IoT)和智能設備的發(fā)展,ARM開發(fā)板因其低功耗、高性能和靈活性而受到開發(fā)者的青睞。 C語言 C語言是一種高效、
    的頭像 發(fā)表于 11-05 11:14 ?900次閱讀

    C語言指針運算符詳解

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

    如何在Excel中靈活運用SUMIF函數(shù)

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

    C語言與Java語言的對比

    C語言和Java語言都是當前編程領域中的重要成員,它們各自具有獨特的優(yōu)勢和特點,適用于不同的應用場景。以下將從語法特性、內(nèi)存管理、跨平臺性、性能、應用領域等多個方面對C
    的頭像 發(fā)表于 10-29 17:31 ?1007次閱讀

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

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

    C語言指針詳細解析

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

    c語言中從左到右結合怎么看

    C語言中,操作符的結合性(Associativity)是指當操作符在表達式中連續(xù)出現(xiàn)時,它們?nèi)绾闻c操作數(shù)結合的順序。對于大多數(shù)二元
    的頭像 發(fā)表于 08-20 11:42 ?1574次閱讀

    面試常考+1:函數(shù)指針指針函數(shù)、數(shù)組指針指針數(shù)組

    在嵌入式開發(fā)領域,函數(shù)指針、指針函數(shù)、數(shù)組指針指針數(shù)組是一些非常重要但又容易混淆的概念。理解它們的特性和應用場景,對于提升嵌入式程序的效率和質量至關重要。一、
    的頭像 發(fā)表于 08-10 08:11 ?1408次閱讀
    面試常考+1:函數(shù)<b class='flag-5'>指針</b>與<b class='flag-5'>指針</b>函數(shù)、數(shù)組<b class='flag-5'>指針</b>與<b class='flag-5'>指針</b>數(shù)組

    按照這樣學習C語言,成為卷王不是夢!

    在計算機編程領域,C語言被譽為一種強大而靈活的編程語言,掌握好C語言不僅可以讓你輕松駕馭各種編程
    的頭像 發(fā)表于 07-06 08:04 ?603次閱讀
    按照這樣學習<b class='flag-5'>C</b><b class='flag-5'>語言</b>,成為卷王不是夢!