【C語言】基礎知識框架補充

前文主要介紹了C語言從零開始學習的基本框架與基礎知識導覽,本文主要補充此前未提及的學習內容,給有意精進C語言者指明一條可供參考的學習路徑。

補充一:動態內存管理

  1. 核心函數(需#include <stdlib.h>):

    • malloc(size):申請size字節的連續內存,返回首地址(類型為void*)。

    • calloc(n, size):申請n*size字節內存,并初始化為0。

    • realloc(ptr, new_size):調整已分配內存塊大小。

    • free(ptr):釋放內存,防止內存泄漏。

  2. 示例

    int *arr = (int*)malloc(5 * sizeof(int)); // 動態數組
    if (arr == NULL) exit(1);                // 檢查分配成功
    arr[0] = 10;
    free(arr);                               // 釋放內存

補充二:枚舉類型(enum)

  1. 定義與使用

    enum Weekday {Sun=7, Mon=1, Tue, Wed}; // Tue自動=2
    enum Weekday day = Mon;                 // day值為1
    • 用途:提高代碼可讀性,限定變量取值范圍。


補充三:類型定義(typedef)

  1. 作用:為現有類型創建別名。

    typedef int Integer;       // Integer 是 int 別名
    typedef struct Node {      // 簡化結構體聲明int data;struct Node *next;
    } Node;
    Node n;                    // 直接使用別名

補充四:位運算

  1. 運算符

    • &(按位與)、|(按位或)、^(按位異或)

    • ~(按位取反)、<<(左移)、>>(右移)

  2. 應用場景

    • 硬件控制:PORT |= 0x01;(設置最低位為1)

    • 數據壓縮:用位存儲多個布爾值。

    • 示例:a = b << 2;?→?b左移2位(等價于b*4)。


補充五:命令行參數

  1. main函數參數

    int main(int argc, char *argv[]) {// argc: 參數個數(至少為1,程序名本身)// argv: 參數字符串數組printf("程序名: %s\n", argv[0]);if (argc > 1) printf("第一個參數: %s\n", argv[1]);
    }
    • 執行:

      ./program arg1 arg2?→?argc=3,?argv[1]="arg1"。

補充六:const關鍵字

  1. 作用

    • 定義常量:const int MAX=100;(值不可修改)

    • 保護指針:

      const int *p = &a;  // *p只讀(指向的值不可改)
      int *const p = &a;  // p只讀(指向不可改)

補充七:預處理器高級用法

  1. 條件編譯

    #ifdef DEBUG            // 若定義了DEBUG宏printf("調試信息");
    #endif
  2. 預定義宏

    • __LINE__:當前行號

    • __FILE__:當前文件名

    • __DATE__:編譯日期


補充八:聯合體(union)

  1. 特點:所有成員共享同一內存空間(大小為最大成員的大小)。

  2. 應用:節省內存,同一時間只存儲一個成員值。

    union Data {int i;float f;char str[20];
    };
    union Data d;
    d.i = 10;               // 此時d.f和d.str無意義

補充九:文件定位函數

  1. 核心函數

    • fseek(fp, offset, whence):移動文件指針。

      • whenceSEEK_SET(文件頭)、SEEK_CUR(當前位置)、SEEK_END(文件尾)。

    • ftell(fp):返回當前文件指針位置。

    • rewind(fp):重置指針到文件頭。

  2. 示例

    fseek(fp, 10, SEEK_SET); // 定位到文件頭后第10字節
    long pos = ftell(fp);    // 獲取當前位置

關鍵總結

  1. 動態內存管理是C語言核心難點,需嚴格配對malloc/free

  2. 位運算在嵌入式開發中至關重要。

  3. const和typedef提升代碼健壯性和可讀性。

  4. 聯合體在協議解析、類型轉換中高效實用。

  5. 文件定位實現隨機讀寫,突破順序訪問限制。

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

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

相關文章

垃圾識別檢測與分類數據集(貓臉碼客第244期)

目標檢測與垃圾&#xff1a;技術革新與環境管理的交匯點 在當今社會&#xff0c;城市化進程不斷加速&#xff0c;人口持續增長&#xff0c;垃圾處理問題愈發凸顯其重要性。有效管理垃圾&#xff0c;不僅關乎環境衛生狀況&#xff0c;更直接影響到城市的可持續發展以及居民的生…

【調研報告】2025年與2030年AI及AI智能體 (Agent) 市場份額分析報告

2025年與2030年AI及AI智能體 (Agent) 市場份額分析報告 摘要 本報告旨在深入分析全球人工智能&#xff08;AI&#xff09;市場及其子領域AI智能體的未來發展軌跡&#xff0c;重點關注其在2025年和2030年的市場規模及其占全球GDP和整體AI市場的比例。分析表明&#xff0c;AI市…

臺式機電腦CPU天梯圖2025年6月份更新:CPU選購指南及推薦

組裝電腦選硬件的過程中,CPU的選擇無疑是最關鍵的,因為它是最核心的硬件,關乎著一臺電腦的性能好壞。對于小白來說,CPU天梯圖方便直接判斷兩款CPU性能高低,準確的說,是多核性能。下面給大家分享一下臺式機電腦CPU天梯圖2025年6月版,來看看吧。 桌面CPU性能排行榜2025 臺…

小白學Pinia狀態管理

目錄 1. 什么是 Pinia&#xff1f; 2. 為什么需要 Pinia&#xff1f; 3. Pinia 的三個核心概念 State&#xff08;狀態&#xff09;- 存儲數據 Getters&#xff08;計算屬性&#xff09;- 處理數據 Actions&#xff08;方法&#xff09;- 修改數據 4. 創建一個簡單的 St…

Tauri2學習筆記

教程地址&#xff1a;https://www.bilibili.com/video/BV1Ca411N7mF?spm_id_from333.788.player.switch&vd_source707ec8983cc32e6e065d5496a7f79ee6 官方指引&#xff1a;https://tauri.app/zh-cn/start/ 目前Tauri2的教程視頻不多&#xff0c;我按照Tauri1的教程來學習&…

SQL進階之旅 Day 26:分庫分表環境中的SQL策略

【SQL進階之旅 Day 26】分庫分表環境中的SQL策略 文章簡述 隨著業務規模的擴大&#xff0c;單一數據庫難以承載海量數據與高并發訪問。分庫分表成為解決這一問題的關鍵手段&#xff0c;但同時也帶來了 SQL 查詢復雜度的顯著提升。本文作為“SQL進階之旅”系列的第26天內容&…

linux之 內存管理(6)-arm64 內核虛擬地址空間變化

一、新內核變動 kernel變化的真快&#xff0c;之前我記得4.x的內核的內核空間的線性映射區位于內核空間的高地址處的128TB&#xff0c;且當前的博客和一些書籍也都還是這樣介紹。可翻了翻kernel的Documentation/arm64/memory.rst文檔&#xff0c;發現最新的kernel已將這128TB移…

循環神經網絡(RNN):從理論到翻譯

循環神經網絡&#xff08;RNN&#xff09;是一種專為處理序列數據設計的神經網絡&#xff0c;如時間序列、自然語言或語音。與傳統的全連接神經網絡不同&#xff0c;RNN具有"記憶"功能&#xff0c;通過循環傳遞信息&#xff0c;使其特別適合需要考慮上下文或順序的任…

window批處理文件(.bat),用來清理git的master分支

echo off chcp 65001 > nul setlocal enabledelayedexpansionecho 正在檢查Git倉庫... git rev-parse --is-inside-work-tree >nul 2>&1 if %errorlevel% neq 0 (echo 錯誤&#xff1a;當前目錄不是Git倉庫&#xff01;pauseexit /b 1 )echo 警告&#xff1a;這將…

C#中的CLR屬性、依賴屬性與附加屬性

CLR屬性的主要特征 封裝性&#xff1a; 隱藏字段的實現細節 提供對字段的受控訪問 訪問控制&#xff1a; 可單獨設置get/set訪問器的可見性 可創建只讀或只寫屬性 計算屬性&#xff1a; 可以在getter中執行計算邏輯 不需要直接對應一個字段 驗證邏輯&#xff1a; 可以…

【mysql】聯合索引和單列索引的區別

區別核心&#xff1a;聯合索引可加速多個字段組合查詢&#xff0c;單列索引只能加速一個字段。 &#x1f539;聯合索引&#xff08;復合索引&#xff09; INDEX(col1, col2, col3)適用范圍&#xff1a; WHERE col1 ... ? WHERE col1 ... AND col2 ... ? WHERE col1 ..…

如何用 HTML 展示計算機代碼

原文&#xff1a;如何用 HTML 展示計算機代碼 | w3cschool筆記 &#xff08;請勿將文章標記為付費&#xff01;&#xff01;&#xff01;&#xff01;&#xff09; 在編程學習和文檔編寫過程中&#xff0c;清晰地展示代碼是一項關鍵技能。HTML 作為網頁開發的基礎語言&#x…

大模型筆記_模型微調

1. 大模型微調的概念 大模型微調&#xff08;Fine-tuning&#xff09;是指在預訓練大語言模型&#xff08;如GPT、BERT、LLaMA等&#xff09;的基礎上&#xff0c;針對特定任務或領域&#xff0c;使用小量的目標領域數據對模型進行進一步訓練&#xff0c;使其更好地適配具體應…

React Native UI 框架與動畫系統:打造專業移動應用界面

React Native UI 框架與動畫系統&#xff1a;打造專業移動應用界面 關鍵要點 UI 框架加速開發&#xff1a;NativeBase、React Native Paper、UI Kitten 和 Tailwind-RN 提供預構建組件&#xff0c;幫助開發者快速創建美觀、一致的界面。動畫提升體驗&#xff1a;React Native…

在QT中使用OpenGL

參考資料&#xff1a; 主頁 - LearnOpenGL CN https://blog.csdn.net/qq_40120946/category_12566573.html 由于OpenGL的大多數實現都是由顯卡廠商編寫的&#xff0c;當產生一個bug時通常可以通過升級顯卡驅動來解決。 OpenGL中的名詞解釋 OpenGL 上下文&#xff08;Conte…

Qt::QueuedConnection詳解

在多線程編程中&#xff0c;線程間的通信是一個關鍵問題。Qt框架提供了強大的信號和槽機制來處理線程通信&#xff0c;其中Qt::QueuedConnection是一種非常有用的連接類型。本文將深入探討Qt::QueuedConnection的原理、使用場景及注意事項。 一、基本概念 Qt::QueuedConnecti…

X86 OpenHarmony5.1.0系統移植與安裝

近期在研究X86鴻蒙,通過一段時間的研究終于成功了,在X86機器上成功啟動了openharmony系統了.下面做個總結和分享 1. 下載源碼 獲取OpenHarmony標準系統源碼 repo init -u https://gitee.com/openharmony/manifest.git -b refs/tags/OpenHarmony-v5.1.0-Release --no-repo-ve…

如何診斷服務器硬盤故障?出現硬盤故障如何處理比較好?

當服務器硬盤出現故障時&#xff0c;及時診斷問題并采取正確的處理方法至關重要。硬盤故障可能導致數據丟失和系統不穩定&#xff0c;影響服務器的正常運行。以下是診斷服務器硬盤故障并處理的最佳實踐&#xff1a; 診斷服務器硬盤故障的步驟 1. 監控警報 硬盤監控工具&#…

vue3提供的hook和通常的函數有什么區別

Vue 3 提供的 hook&#xff08;組合式函數&#xff09; 和普通函數在使用場景、功能和設計目的上有明顯區別&#xff0c;它們是 Vue 3 組合式 API 的核心概念。下面從幾個關鍵維度分析它們的差異&#xff1a; 1. 設計目的不同 Hook&#xff08;組合式函數&#xff09; 專為 Vu…

Spark提交流程

bin/spark-submit --class org.apache.spark.examples.SparkPi --master yarn ./examples/jars/spark-examples_2.12-3.3.1.jar 10 這一句命令實際上是 啟動一個Java程序 java org.apache.spark.deploy.SparkSubmit 并將命令行參數解析到這個類的對應屬性上 因為master給…