




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
2.4模塊化程序的設計能力目標:
簡單了解結構體、指針的相關基礎知識,重點理解并掌握C語言函數的概念及使用方法。任務要求:隨機輸入五個正整數,將五個數字按從小到大的順序進行排列。2.4.1結構體認知
●數組是同種類型數據的組合。
●結構體是不同類型數據的組合。在STM32的HAL/LL庫中大量使用了結構體,用于對片內外設的一組不同的參數進行設定,但這部分主要是一些自動生成代碼,讀者僅僅需要了解即可。結構體的使用可分為如下三步:構造結構體類型→定義結構體變量→結構體變量賦值。①首先是構造結構體類型的一般形式:struct結構體名{ 類型名1成員名1; 類型名2成員名2; …… 類型名3成員名3;};比如構造一個名為“Student”的結構體,用來記錄學生的基本信息:②然后是定義結構體變量的一般形式:比如定義一個“Student”型的結構體變量“student1”:structStudent{ unsignedintNo;//學號 charName[10];//姓名 charSex;//性別};struct結構名
變量名列表;structStudentstudent1;③最后是使用這個結構體變量,包括賦值和讀取它的值。可以在定義的同時進行初始化,比如:也可以在定義完成后進行賦值,比如:structStudentstudent1={325,"張三",'M'};structStudentstudent1;student1.No=325;strcpy(student1.Name,"張三");//字符串賦值函數,需要包含頭文件“string.h”student1.Sex='M';2.4.2指針認知指針就是用于指向變量內存單元的變量,或者說在指針變量中存儲了其指向變量的內存地址。
指針在STM32單片機程序的開發中,主要是調用HAL/LL庫API函數時進行實參的地址引用,這里僅對①指針指向基本變量、②指針指向一維數組的使用方法進行扼要介紹,在2.4.3中也會簡單介紹③指針變量作為函數參數的使用方法。(1)指針指向基本變量首先是指針變量的定義,定義格式為:類型說明符*變量名;這里,“*”表示這是一個指針變量,類型說明符指的是指針所指向變量的數據類型。比如:int*p;表示定義了一個指針變量p,他可以指向一個整型變量,但具體指向哪一個整型變量,需要對指針變量賦值,指針變量的賦值格式:變量1=&變量2;
這里,“&”是取地址運算符,表示獲取變量2的地址,注意到這是一個單目運算符,與位運算符中的位與運算符“&”不是一個功能,比如:
也可以定義的同時直接做初始化:利用指針引用變量,比如:
在利用指針引用變量時,“*p”表示指針變量“p”指向變量的值。運行結果:inta,*p;p=&a;inta,*p=&a;inta=56,*p=&a;printf("%d",*p);(2)指針指向一維數組數組在計算機內存中的地址是連續的,一般我們可以將指針指向數組的第一個元素的地址,在遍歷數組中每一個元素時,只需要將指針不斷往后偏移即可。比如定義一個指針并指向整型一維數組的第一個元素:也可以:
即“&a[0]”和“a”都可以表示數組a的首地址。int*p,a[5]={12,23,34,45,56};p=&a[0];int*p,a[5]={12,23,34,45,56};p=a;利用指針遍歷一維數組,比如:
這里的“*p++”,“++”優先級別比“*”高,等價于“*(p++)”。
運行結果:int*p,a[5]={12,23,34,45,56},i;p=a;for(i=0;i<5;i++){ printf("%d",*p++);}2.4.3函數與模塊化程序設計C語言程序一般是由一個主函數(即main函數)加若干其他函數構成,主函數是整個程序執行的入口,不可或缺。將一段具有特定功能的代碼封裝成函數,既方便程序員在后續的開發中直接調用,也提高了代碼的可維護性,可謂一舉兩得。由于每一個函數也是一個獨立的功能模塊,因此C語言也被稱為模塊化程序設計語言。函數的使用一般分三步進行:定義、聲明、調用。定義的一般形式:函數類型函數名(形式參數表){函數體語句}第一行構成函數的首部,大括號中的內容構成函數的函數體。其中,形式參數簡稱“形參”,即函數的輸入值,函數的形參可以有多個,也可以只有一個,甚至于沒有形參;函數類型也叫函數的返回值類型,即函數的輸出值類型,函數的返回值最多只能有一個,當函數沒有返回值時,函數類型必須寫上“void”。聲明的一般形式:一般直接將函數的首部復制并粘貼到主函數之前,加上分號“;”即可。調用的一般形式:函數類型函數名(形式參數表);函數名(實際參數表);調用函數時,必須將形參全部替換為實際參數(簡稱“實參”)。函數的定義可以理解為是定義了一種運算關系,形參可以理解為自變量,返回值可以理解為因變量;函數的調用可以理解為將常量代入這種運算關系從而得出運算結果;函數的聲明,這與編譯器的編譯順序有關,比如定義的函數在主函數之后,而主函數調用了該函數,如果不提前聲明,編譯器會認為該函數不存在從而終止編譯。
比如,圓面積的計算:#include<stdio.h>constfloatpi=3.141592;//“const關鍵字說明“pi”是一個常量main(){ floatr,s; printf("請輸入半徑:"); scanf("%f",&r); s=pi*r*r; printf("圓面積:%f\n",s);}將圓面積的計算公式封裝成獨立函數:#include<stdio.h>constfloatpi=3.141592;//“const”關鍵字說明“pi”是一個常量floatsquare(floatr);//函數的聲明main(){ floatr,s; printf("請輸入半徑:"); scanf("%f",&r); s=square(r);//函數的調用 printf("圓面積:%f\n",s);}//函數的定義floatsquare(floatr){ returnpi*r*r;//由“return”語句返回運算結果}
圓面積計算函數中,形參只有半徑“r”,返回值類型為浮點型,由于這不是一個void型函數,因此調用時可以將函數返回值賦值給變量“s”。
運行結果:
值得注意的是,在main函數和square函數中都有變量“r”,但這兩個變量“r”沒有任何關系,他們分屬于兩個不同函數的“局部變量”,其作用域僅限于各自所在的函數內部;變量“pi”定義的位置在所有函數之前,這屬于“全局變量”,其作用域可達整個程序的任何位置,如果當全局變量與局部變量同名時,局部變量會在其作用域內自動屏蔽同名全局變量。接下來比較一下形參分別為變量和指針時的區別:#include<stdio.h>voidf1(inta);voidf2(int*p);main(){ inta=0; f1(a); printf("a=%d\n",a); f2(&a); printf("a=%d\n",a);}voidf1(inta){ a++;}voidf2(int*p){ (*p)++;}
運行結果:f1函數采用的是“值傳遞”的參數傳遞方式,函數執行完畢后,不會影響到原變量的值,而f2函數采用的是“地址傳遞”的參數傳遞方式,函數在執行過程中,直接改變了指針指向的變量值,所以函數執行完畢后,原變量的值自然發生了變化。2.4.4任務程序的編寫顯然,本次任務必須借助于數組,在定義排序
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 自然語言及語音處理項目式教程 實訓指導 實訓1 配置NLP環境
- 分析師預期選股策略月報:分析師預期修正選股策略今年相對中證全指超額3.06
- 2025以色列與伊朗沖突全面解析課件
- 氫能源未來2025年加氫站建設成本效益分析與布局指南報告
- 2025年家具制造業個性化定制生產模式市場風險預警報告
- 2025年煤炭清潔燃燒技術產業鏈上下游協同發展報告
- 工業互聯網平臺安全多方計算在智能倉儲物流中的應用報告
- 教育大數據分析2025年:教育資源配置優化與教育公平研究報告
- 工業互聯網平臺網絡安全態勢感知技術在電力行業的應用與優化報告
- 工業互聯網平臺安全多方計算技術:2025年網絡安全風險預警與應對策略研究報告
- 公路工程基本建設項目概算、預算編制辦法
- 最詳細的整車開發流程
- 部編版七年級歷史(下)材料論述題專項訓練
- 年產1000噸乳酸的生產工藝設計
- 博克服裝CAD制版說明操作手冊(共95頁)
- 光電效應測普朗克常數-實驗報告
- (完整word版)數據模型與決策課程案例分析
- 自制桁架移動式操作平臺施工方案
- 物業服務參與校園文化建設及舉辦大型活動配合措施
- 太陽能LED路燈項目實施方案
- 調崗調薪實操指引PPT課件
評論
0/150
提交評論