C語言(十)

一、函數概述

函數是面向過程編程思想的具體體現,主要作用:

  • 降低程序之間的耦合性

  • 提高代碼的復用性和可維護性

一個完整的 C 程序由**一個或多個程序模塊(源文件)**組成。為便于開發與調試,通常會將代碼拆分為多個源文件,并組合成一個整體程序。

  • 每個源文件是一個編譯單位,即 C 編譯器以“源文件”為單位進行編譯。

  • 程序從 main() 函數開始執行,調用其他函數后,執行完再返回到 main(),最終在 main() 結束程序運行。


二、函數的基本結構

函數定義包括兩部分:

1. 函數頭(首部)

類型說明符 函數名(形式參數列表)

2. 函數體

{ 聲明部分; 語句部分; }

示例

int add(int a, int b)

{

? ? return a + b;

}

  • int:函數返回類型

  • add:函數名

  • (int a, int b):形式參數

  • {}:函數體


三、函數的類型與約束

  • 返回類型:可以是除數組以外的任意類型(包括 void

  • return

    • 如果返回類型是 void,則不能返回值;

    • 返回值類型必須與定義一致或可隱式轉換;

    • 不寫返回類型默認是 int

限制:

  • 函數不能嵌套定義

  • 函數之間可以互相調用,包括嵌套調用


四、函數的調用

基本語法:

函數名(實際參數);

示例:

int result = add(3, 5); // 實參傳入 3 和 5

調用規則:

  • 實參與形參數量必須一致,類型要匹配或可自動轉換;

  • 實參與形參名稱可相同,但屬于不同作用域;

  • 函數必須先聲明或定義,否則無法調用;

函數嵌套調用示例:

int add(int a, int b) {
return a + b;
}

int square(int x) {
return x * x;
}

int main() {
int result = square(add(2, 3));
printf("%d\n", result); // 輸出 25
return 0;
}


五、函數調用注意事項

  • 值傳遞:函數傳參是值傳遞,傳的是副本,不影響原變量;

  • 參數計算順序:從右向左

    fun(i++, i++, i++); // 實際執行順序為從右向左

不要在一次調用中對同一變量進行多次自增/自減,可能導致結果不可預測。

  • C 語言不支持函數重載,即函數不能重名。


六、return 語句說明

  • return 可終止當前函數并返回值(或不返回)

  • 返回值類型應與函數聲明一致


七、函數的種類

1. 標準庫函數

如:printfscanfstrlenstrcmpstrcpy

  • 系統提供,無需自定義

  • 不同編譯器支持的庫函數數量可能不同

2. 用戶自定義函數

  • 用戶根據需要自定義

  • 提高模塊化和代碼復用能力


八、C 語言內存的五大分區

1. 棧區(Stack)

  • 系統自動分配和釋放

  • 用于存儲局部變量、函數調用返回地址等

  • 遵循 FILO 原則(先進后出)

  • Linux 棧約 8MB,Windows 棧通常 <1MB

2. 堆區(Heap)

  • 需要程序員手動申請(如 malloc)和釋放(如 free

  • 生命周期由程序員控制

3. 靜態區(全局區)

  • 存儲全局變量和靜態變量

  • 生命周期貫穿整個程序執行周期

4. 字符串常量區

  • 存儲由雙引號括起來的字符串常量

  • 單引號(如 'A')表示字符常量,不屬于此區

5. 代碼區(text segment)

  • 存放程序編譯生成的機器指令

  • 是只讀區域,防止代碼被誤修改

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

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

相關文章

QT項目-仿QQ音樂的音樂播放器(第二節)

目錄 自定義控件&#xff1a; BtForm類中實現 BtForm上的動畫效果 自定義控件&#xff1a; 該控件實際由&#xff1a;圖?、?字、動畫三部分組成。圖?和?字分別?QLabel展?&#xff0c;動畫部分內部實際為4 個QLabel。 ① 將BtForm的geometry的寬度和?度修改為200*35。…

【世紀龍科技】數字課程資源-新能源汽車概論

一、課程介紹本課程為通過項目任務式教學&#xff0c;全面系統的講解了新能源汽車的基礎知識及相關技能&#xff0c;培養和提高學生的動手能力和理論知識的工程應用能力。以典型工作任務帶動知識與技能的學習&#xff0c;采用項目教學培養學生的崗位技能、學習能力和職業素養。…

iOS Core Data 本地數據庫 使用詳解:從模型關系到數據操作

一、引言&#xff1a;Core Data&#xff0c;在本地數據持久化中的地位在 iOS 開發中&#xff0c;本地數據存儲幾乎是每一個 App 都繞不開的問題。無論是緩存用戶信息、離線瀏覽內容&#xff0c;還是記錄用戶操作歷史&#xff0c;一個合適的數據持久化方案都能大大提升應用的體驗…

Java-79 深入淺出 RPC Dubbo 動態路由架構詳解:從規則設計到上線系統集成

點一下關注吧&#xff01;&#xff01;&#xff01;非常感謝&#xff01;&#xff01;持續更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持續更新中&#xff01;&#xff08;長期更新&#xff09; AI煉丹日志-30-新發布【1T 萬億】參數量大模型&#xff01;Kim…

Linux內核中動態內存分配函數解析

在C語言中&#xff0c;動態內存分配通常用于在運行時申請內存。在內核編程中&#xff0c;動態內存分配與用戶空間有所不同&#xff0c;因為內核需要更謹慎地處理內存&#xff0c;且不能使用用戶空間的庫&#xff08;如glibc&#xff09;。下面我們將詳細分析Linux內核中動態申請…

Next.js 中配置不同頁面布局方案

在 Next.js 應用中&#xff0c;你可以通過多種方式實現某些頁面全屏、某些頁面帶菜單/頁眉/頁腳的需求。以下是幾種實現方案&#xff1a; 方案一&#xff1a;使用多個布局組件 1. 創建不同的布局組件 // app/default-layout.tsx import Header from /components/header; import…

Spring Boot 使用外置 Servlet 容器:從配置到部署全指南

在 Spring Boot 開發中&#xff0c;我們通常使用嵌入式 Servlet 容器&#xff08;如 Tomcat&#xff09;&#xff0c;它能將應用打包成可執行 JAR&#xff0c;簡化部署流程。但在某些場景下&#xff08;如需要支持 JSP、復雜的容器定制或企業級部署規范&#xff09;&#xff0c…

借助AI學習開源代碼git0.7之九diff-files

借助AI學習開源代碼git0.7之九diff-files diff-files.c 是一個用于比較工作目錄中的文件和 Git 索引&#xff08;暫存區&#xff09;中文件的工具。 實質上&#xff0c;它是 git diff命令在不指定特定提交時功能的核心實現。 主要功能分析&#xff1a; 1. 核心功能 diff-files …

社區資源媒體管理系統設計與實現

社區資源媒體管理系統設計與實現 1. 系統概述 社區資源媒體管理系統是一個專為社區戶外廣告打造的高效、專業化平臺&#xff0c;旨在實現社區媒體的數字化管理、智能投放和便捷交易。該系統將整合社區各類廣告資源&#xff0c;為廣告主、物業公司和社區居民提供一站式服務。 1.…

12.1.6 weak_ptr

weak_ptr weak_ptr會指向一個share_ptr&#xff08;使用一個share_ptr來初始化weak_ptr&#xff09;&#xff0c;但并不會增加這個share_ptr的引用計數器&#xff0c;其析構也不會減少share_ptr的引用計數器。 構造函數及使用 #include <iostream> #include <memory&g…

深度分析Java內存模型

Java 內存模型&#xff08;Java Memory Model, JMM&#xff09;是 Java 并發編程的核心基石&#xff0c;它定義了多線程環境下線程如何與主內存&#xff08;Main Memory&#xff09;以及線程的本地內存&#xff08;工作內存&#xff0c;Working Memory&#xff09;交互的規則。…

代碼隨想錄算法訓練營第五十二天|圖論part3

101. 孤島的總面積 題目鏈接&#xff1a;101. 孤島的總面積 文章講解&#xff1a;代碼隨想錄 思路&#xff1a; 與島嶼面積差不多&#xff0c;區別是再dfs的時候&#xff0c;如果碰到越界的&#xff0c;需要用一個符號標記這不是孤島再continue #include <iostream> #i…

前端實現 excel 數據導出,封裝方法支持一次導出多個Sheet

一、前言 后臺管理項目有時會有需要前端導出excel表格的功能&#xff0c;有時還需要導出多個sheet&#xff0c;并給每個sheet重新命名&#xff0c;下面我們就來實現一下。 二、實現效果圖 三、實現步驟 1、 安裝 命令行安裝 xlsx 和 file-saver npm install xlsx -S npm i…

【Lambda 表達式】返回值為什么是auto

一個例子&#xff1a; int x 10; auto add_x [x](int y) -> int {return x y; }; int result add_x(5); // 結果是 15lambda 是匿名類型&#xff0c;必須用 auto 來接收。&#xff08;必須寫auto&#xff0c;不可省略&#xff09;內層 -> auto 是函數的返回類型自動推…

【小董談前端】【樣式】 CSS與樣式庫:從實現工具到設計思維的跨越

CSS與樣式庫&#xff1a;從實現工具到設計思維的跨越 一、CSS的本質&#xff1a;樣式實現的「施工隊」 CSS作為網頁樣式的描述語言&#xff0c;其核心能力在于&#xff1a; 精確控制元素的尺寸、位置、顏色實現響應式布局和動畫效果與HTML/JavaScript協同完成交互體驗 但CS…

MTSC2025參會感悟:大模型 + CV 重構全終端 UI 檢測技術體系

目錄 一、傳統 UI 自動化的困局:高成本與低效率的雙重枷鎖 1.1 根深蒂固的技術痛點 1.2 多維度質量挑戰的疊加 二、Page eyes 1.0:純視覺方案破解 UI 檢測困局 2.1 純視覺檢測的核心理念 2.2 頁面加載完成的智能判斷 2.3 視覺模型驅動的異常檢測 2.4 大模型賦能未知異…

使用Claude Code從零到一打造一個現代化的GitHub Star項目管理器

在日常的開發工作中&#xff0c;我們經常會在GitHub上star一些有用的項目庫。隨著時間的推移&#xff0c;star的項目越來越多&#xff0c;如何有效管理這些項目成為了一個痛點。 今天&#xff0c;分享我使用Claude Code從零構建的一個GitHub Star管理插件。項目背景與需求分析 …

為什么 Linux 啟動后還能升級內核?

? 為什么 Linux 啟動后還能升級內核&#xff1f; 簡單結論&#xff1a; 因為 “安裝/升級內核 ≠ 當前就使用該內核”&#xff0c;Linux允許你安裝多個內核版本&#xff0c;并在下次啟動時選擇其中一個來加載運行。 &#x1f9e0; 舉個現實生活類比 你在穿一件衣服&#xff08…

Go語言實戰案例-統計文件中每個字母出現頻率

以下是《Go語言100個實戰案例》中的 文件與IO操作篇 - 案例19&#xff1a;統計文件中每個字母出現頻率 的完整內容。本案例適合用來練習文件讀取、字符處理、map統計等基礎技能。&#x1f3af; 案例目標讀取一個本地文本文件&#xff0c;統計并打印出其中每個英文字母&#xff…

Notepad++工具操作技巧

1、notepad -> ctrlf -> 替換(正則表達式) -> $-a ->每行的行尾加a&#xff1b; 2、notepad -> ctrlf -> 替換(正則表達式) -> ^-a ->每行的行首加a &#xff1b; 3、按住alt切換為列模式 4、刪除空行-不包括有空格符號的空行 查找替代 查找目標…