電子設計大賽【C語言核心知識點】講解

?目錄

前言

1. 基礎語法

2. 流程控制

3. 函數

4. 數組與字符串

5. 指針(核心重點)

6. 內存管理

7. 結構體與聯合體

8. 文件操作

9. 預處理器

10. 高級特性

內存布局圖解


前言

在進行程序代碼開發之前,需要掌握好C語言各個模塊之間的內容。在TI開發板時,需要對C語言有更好的理解和應用,其中,主要考察的是對代碼的操作和庫函數的調用。因此,對于本次比賽內容,重新對C語言知識進行講解。


1. 基礎語法

模塊內容示例要點
數據類型基本類型、派生類型int a; float b; char c;內存占用:char(1B)?int(4B)?float(4B)?double(8B)
變量與常量變量聲明/初始化、常量定義const int MAX=100;命名規則:字母/數字/下劃線,區分大小寫
運算符算術、關系、邏輯、位運算a & b; c << 2;優先級:`() > ! > 算術 > 關系 > && >> 賦值`
輸入輸出printf()/scanf()printf("%d,%f", num, f);格式符:%d整型?%f浮點?%c字符?


2. 流程控制

類型語法結構示例應用場景
條件語句

if-else?switch-case

if(score>90) grade='A';
else if(score>60) grade='B';

| 多分支判斷 |
|?循環結構?|?for?while?do-while?|

for(int i=0; i<10; i++){sum += i;
}

| 重復操作 |
|?跳轉語句?|?break?continue?goto?|

while(1){if(error) break;
}

| 中斷循環/函數返回 |


3. 函數

模塊內容示例要點
函數定義返回值類型、參數列表
int add(int a, int b) {return a+b;
}

| 需先聲明后使用 |
|?參數傳遞?| 值傳遞、地址傳遞 |

void swap(int *x, int *y) {int t=*x; *x=*y; *y=t;
}

| 地址傳遞可修改實參 |
|?遞歸函數?| 函數調用自身 |

int factorial(int n) {if(n<=1) return 1;return n*factorial(n-1);
}

| 需有終止條件,棧空間有限 |
|?作用域?| 局部變量、全局變量 |?static int count;?|?static延長生命周期,限制作用域 |


4. 數組與字符串

類型聲明方式操作注意事項
一維數組int arr[5];索引訪問:arr[0]=10;下標從0開始,內存連續
多維數組int matrix[3][3];嵌套循環遍歷行優先存儲
字符數組char str[20];strcpy(s1,s2); strlen(s);'\0'結尾
字符串函數<string.h>
strcat(s1,s2); // 拼接
strcmp(s1,s2); // 比較

| 注意緩沖區溢出風險 |


5. 指針(核心重點)

概念語法示例應用場景
基本指針變量地址操作
int *p = &a;
*p = 20; // 修改a的值

| 間接訪問變量 |
|?指針運算?| 算術運算、關系運算 |?p++; p1-p2;?| 數組遍歷、內存操作 |
|?數組指針?| 指針與數組關系 |

int arr[5];
int *p = arr; // p等價&arr[0]

| 數組名是常量指針 |
|?函數指針?| 指向函數的指針 |

int (*funcPtr)(int);
funcPtr = &add;

| 回調函數、策略模式 |
|?多級指針?| 指針的指針 |?int **pp = &p;?| 動態二維數組 |


6. 內存管理

操作函數示例注意事項
靜態分配編譯時分配int arr[100];棧空間有限(通常1-8MB)
動態分配malloc/calloc
int *p = (int*)malloc(10*sizeof(int));

| 堆空間較大,需手動釋放 |
|?內存釋放?|?free()?|?free(p); p=NULL;?| 避免野指針 |
|?內存操作?|?memset/memcpy?|

memset(p, 0, 100); // 內存置0
memcpy(dest, src, size);

| 底層內存操作 |


7. 結構體與聯合體

類型定義方式特點應用場景
結構體
struct Student {char name[20];int age;
};

| 不同數據類型的集合 | 數據封裝 |
|?結構體指針?|

struct Student *s;
s->age = 20;

| 箭頭運算符訪問 | 動態結構體 |
|?聯合體?|

union Data {int i;float f;
};

| 共享內存空間 | 節省內存、類型轉換 |
|?枚舉?|

enum Color {RED, GREEN=5, BLUE};

| 命名常量集合 | 狀態機、選項設置 |


8. 文件操作

操作函數模式示例
打開文件fopen()"r"讀?"w"寫?"a"追加FILE *fp = fopen("data.txt","r");
讀寫數據fprintf/fscanf格式化I/O
fprintf(fp, "%d", num);
fscanf(fp, "%d", &num);

|?字符I/O?|?fgetc/fputc?| 單個字符 |?ch = fgetc(fp);?|
|?行I/O?|?fgets/fputs?| 字符串 |?fgets(buf, 100, fp);?|
|?關閉文件?|?fclose()?| 釋放資源 |?fclose(fp);?|


9. 預處理器

指令功能示例應用場景
宏定義#define#define PI 3.14159常量定義、代碼簡化
條件編譯#ifdef/#endif
#ifdef DEBUGprintf("Debug info");
#endif

10. 高級特性

特性說明示例應用
位字段緊湊存儲布爾值
struct {unsigned int isReady:1;unsigned int hasData:1;
} status;

| 硬件寄存器操作 |
|?可變參數?| 不定參數函數 |

#include <stdarg.h>
void func(int n, ...) {va_list args;va_start(args, n);int val = va_arg(args, int);
}

|?printf()實現原理 |
|?內聯函數?|?inline關鍵字 |?inline int max(int a, int b);?| 減少函數調用開銷 |
|?類型限定符?|?const?volatile?|?volatile int *reg;?| 硬件編程、編譯器優化控制 |


內存布局圖解

+------------------+
| ? 代碼區 ? ? ? ? | 程序指令(只讀)
+------------------+
| ? 靜態數據區 ? ? ?| 全局/靜態變量
+------------------+
| ? ? ? ↓ 堆 ? ? ? | 動態分配(malloc等)
| ? ? ? ↑ ? ? ? ? ?|
+------------------+
| ? ? ? ↓ 棧 ? ? ? | 局部變量、函數調用
| ? ? ? ↑ ? ? ? ? ?|
+------------------+
| ? 命令行參數 ? ? ?| argc/argv
+------------------+


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/90133.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/90133.shtml
英文地址,請注明出處:http://en.pswp.cn/web/90133.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Numpy 庫 矩陣數學運算,點積,文件讀取和保存等

目錄 1.數組&#xff08;矩陣&#xff09;的組合 2.數組&#xff08;矩陣&#xff09;的切割 3.數組的數學運算 4.數組的深拷貝和淺拷貝 5.隨機模塊 6.矩陣統計運算 7.矩陣的特有運算點積&#xff0c;求逆 8.文件讀取和保存 1.數組&#xff08;矩陣&#xff09;的組合 水…

STL學習(?函數對象,謂詞,內建函數對象)

目錄 一、函數對象 1.函數對象的概念 2.函數對象的使用 &#xff08;1&#xff09;函數對象在使用的時候&#xff0c;可以像普通函數那樣調用&#xff0c;可以有參數&#xff0c;也可以有返回值。 &#xff08;2&#xff09;函數對象超出普通函數的概念&#xff0c;函數對象…

【爬蟲】05 - 爬蟲攻防

爬蟲05 - 爬蟲攻防 文章目錄爬蟲05 - 爬蟲攻防一&#xff1a;隨機User-Agent爬蟲1&#xff1a;fake-useragent2&#xff1a;高級反反爬策略3&#xff1a;生產環境建議二&#xff1a;代理IP爬蟲1&#xff1a;獲取代理IP2&#xff1a;高階攻防3&#xff1a;企業級的代理實戰三&am…

FPGA自學——存儲器模型

FPGA自學——存儲器模型 文章目錄FPGA自學——存儲器模型一、IP核二、ROM&#xff08;read only memory&#xff09;三、ROM的IP核調用四、RAM&#xff08;random access memory&#xff09;五、RAM的IP核調用總結1.不同波形的使用的存儲器2.塊與分布式的選擇3.FPGA與模塊的容量…

【C++】stack和queue拓展學習

目錄 1.反向迭代器思路及實現 1.1. 源碼及框架分析 1.2. 實現反向迭代器 2.stack和queue練習拓展-計算器實現 2.1. 后綴表達式概念 2.2. 后綴表達式運算規則 2.3. 中綴表達式轉后綴表達式 2.3.1 轉換思路 2.3.2 代碼實現 2.4. 計算器實現 1.反向迭代器思路及實現 1.1…

Web3與區塊鏈如何革新網絡安全——走在前沿

隨著互聯網技術的飛速發展&#xff0c;網絡安全問題日益成為全球關注的焦點。Web3和區塊鏈技術作為新興的技術力量&#xff0c;正在逐步改變網絡安全的格局。本文將探討Web3和區塊鏈技術如何革新網絡安全&#xff0c;走在技術前沿。 1. Web3技術概述 Web3&#xff0c;即第三代互…

網絡初級安全第三次作業

<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>用戶登錄</title><style>* {margin:…

CSS中用display實現元素的顯示/隱藏切換

** 通過display中的none和block ** 在前端開發中&#xff0c;display: none 和 display: block 是兩種常用的 CSS 顯示模式&#xff0c;核心區別在于&#xff1a;是否在頁面中保留元素的占位空間 1. 核心區別屬性display: nonedisplay: block占位空間元素完全從渲染樹中移除&am…

因果圖方法設計測試用例的價值與使用范圍

一、因果圖方法的核心原理 因果圖方法通過分析軟件規格說明中的輸入條件&#xff08;因&#xff09;和輸出結果&#xff08;果&#xff09;之間的邏輯關系&#xff0c;利用圖形化方式將這些關系清晰展現。它使用特定的符號表示因果關系&#xff08;如恒等、非、或、與&#xff…

智慧農服數字化平臺-數字科技賦能農業,開啟智慧三農新篇章

智慧農服數字化平臺數字科技賦能農業&#xff0c;開啟智慧三農新篇章平臺概覽在鄉村振興和農業現代化的時代背景下&#xff0c;我們推出了創新的農業服務數字化平臺——一個專為農業生產者打造的綜合性SaaS服務平臺。平臺以"科技助農、數據興農"為使命&#xff0c;通…

在線教育培訓課程視頻如何防下載、防盜錄?

在數字化學習日益普及的今天&#xff0c;高質量的在線課程已成為教育機構、知識付費平臺和講師的核心競爭力。如何在不影響學員正常學習體驗的前提下&#xff0c;有效防止課程視頻被惡意盜取&#xff1f;今天介紹在線教育課程防下載、防盜錄的10種視頻加密方法&#xff0c;看看…

圖像分析學習筆記(2):圖像處理基礎

圖像分析學習筆記&#xff1a;圖像處理基礎圖像增強方法圖像復原方法圖像分割方法形態學處理圖像增強方法 目的&#xff1a;改善視覺效果&#xff0c;例如增強對比度定義&#xff1a;為了改善視覺效果、便于人或計算機對圖像的分析理解&#xff0c;針對圖像的特點或存在的問題…

生存分析機器學習問題

研究目標&#xff1a; 開發一個機器學習模型&#xff0c;用于個性化預測XXX的總體生存期。 模型輸入&#xff1a;結合生存時間、治療方案、人口統計學特征和實驗室測試結果等多種特征。 模型輸出&#xff1a;預測二元結果&#xff08;活著 vs. 死亡&#xff09;。 應用場景&…

【華為機試】547. 省份數量

文章目錄547. 省份數量描述示例 1示例 2提示解題思路核心分析問題轉化算法選擇策略1. 深度優先搜索 (DFS)2. 廣度優先搜索 (BFS)3. 并查集 (Union-Find)算法實現詳解方法一&#xff1a;深度優先搜索 (DFS)方法二&#xff1a;廣度優先搜索 (BFS)方法三&#xff1a;并查集 (Union…

09_Spring Boot 整合 Freemarker 模板引擎的坑

09_Spring Boot 整合 Freemarker 模板引擎的坑 1.背景&#xff1a; springboot 版本&#xff1a;3.0.2 2. 引入依賴 在 pom.xml 中添加&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web<…

十七、【Linux系統yum倉庫管理】替換阿里源、搭建本地yum源

替換阿里源、搭建本地yum源本章學習目標內容簡介阿里外網源核心功能本地yum核心功能操作演示替換阿里外網源備份原有yum源清理沖突配置下載阿里源配置文件添加EPEL擴展源清理緩存重建索引驗證源狀態測試安裝軟件使用鏡像搭建本地倉庫準備ISO鏡像創建掛載點目錄掛載iso文件驗證掛…

家庭網絡怎么進行公網IP獲取,及內網端口映射外網訪問配置,附無公網IP提供互聯網連接方案

在家庭網絡中&#xff0c;我們常常需要通過公網IP來訪問內網中的設備&#xff0c;比如家庭NAS、Web服務器或監控攝像頭。要實現這個目標&#xff0c;首先要確保你的網絡具有一個可用的公網IP&#xff0c;然后通過路由器配置端口映射&#xff08;Port Forwarding&#xff09;。如…

(LeetCode 面試經典 150 題 ) 128. 最長連續序列 (哈希表)

題目&#xff1a;128. 最長連續序列 思路&#xff1a;哈希表&#xff0c;時間復雜度0(n)。 用集合set來實現哈希表的功能&#xff0c;記錄所有出現的元素。然后遍歷元素&#xff0c;細節看注釋。 C版本&#xff1a; class Solution { public:int longestConsecutive(vector&…

Altera Quartus:BAT批處理實現一鍵sof文件轉換為jic文件

sof文件是Quartus編譯默認生成的程序文件&#xff0c;用于通過JTAG口下載到FPGA內部RAM&#xff0c;斷電程序會丟失&#xff0c;jic文件是用于固化到外部Flash中的程序文件&#xff0c;斷電程序不會丟失。本文介紹如何通過批處理文件實現sof到jic的一鍵自動化轉換。 Quartus工程…

基于單片機嬰兒床/嬰兒搖籃/嬰兒車設計/嬰兒監護系統

傳送門 &#x1f449;&#x1f449;&#x1f449;&#x1f449;其他作品題目速選一覽表 &#x1f449;&#x1f449;&#x1f449;&#x1f449;其他作品題目功能速覽 概述 本設計實現了一種基于單片機的多功能智能嬰兒監護系統&#xff0c;集成于嬰兒床、搖籃或嬰兒車中…