自學第十五天----深入理解函數上

1. 函數是什么?

維基百科中對函數的定義: 子程序

在計算機科學中,子程序(英語:Subroutine, procedure, function, routine, method, subprogram, callable unit),是一個大型程序中的某部分代碼, 由一個或多個語句塊組成。它負責完成某項特定任務,而且相較于其他代 碼,具備相對的獨立性。

一般會有輸入參數并有返回值,提供對過程的封裝和細節的隱藏。這些代碼通常被集成為軟件庫。

2. C語言中函數

? ?1.庫函數
? ?2.自定義函數

?2.1 庫函數:

像上面我們描述的基礎功能,它們不是業務性的代碼。我們在開發的過程中每個程序員都可能用的到, 為了支持可移植性和提高程序的效率,所以C語言的基礎庫中提供了一系列類似的庫函數,方便程序員 進行軟件開發。

說白了就是開發c語言的人幫你設定好的函數,你直接拿去用就可以了

這是c++的庫函數網站: www.cplusplus.com

簡單的總結,C語言常用的庫函數都有:

---IO函數

---字符串操作函數

---字符操作函數

---內存操作函數

---時間/日期函數

---數學函數

---其他庫函數?

?需要全部記住嗎?

Nonono! 只需要學會查詢工具的使用:

MSDN(Microsoft Developer Network)

www.cplusplus.com

http://en.cppreference.com(英文版)

http://zh.cppreference.com(中文版)

2.2 自定義函?

相比于庫函數更加重要的是自定義函數。

自定義函數和庫函數一樣,有函數名,返回值類型和函數參數。 但是不一樣的是這些都是我們自己來設計。這給程序員一個很大的發揮空間。

ret_type fun_name(para1, * ){statement;//語句項
}ret_type  返回類型
fun_name   函數名
para1      函數參數

舉一個很經典的例子

寫一個函數可以交換兩個整形變量的內容。

首先說明一下,函數中如果不需要返回值,則使用void關鍵字?

#include <stdio.h>
void Swap1(int x, int y){int tmp = 0;tmp = x;x = y;y = tmp;}int main(){int num1 = 1;int num2 = 2;Swap1(num1, num2);printf("Swap1::num1 = %d num2 = %d\n", num1, num2);return 0;
}

看上去實現了其實并沒有,因為函數中x,y與我們輸入的a,b所代表的內存都不一樣,這里只是將a與b的值賦給x,y進行計算,最終與a和b無關。

正確的寫法應該是用int*調用其內存,使我們的a,b與x,y是相同的(所代表的內存相同)

 //正確的版本
void Swap2(int *px, int *py){int tmp = 0;tmp = *px;*px = *py;*py = tmp;}int main(){int num1 = 1;int num2 = 2;printf("Swap2::num1 = %d num2 = %d\n", num1, num2);return 0;}

?3. 函數的參數

3.1 實際參數(實參):

---真實傳給函數的參數,叫實參。

---實參可以是:常量、變量、表達式、函數等。

---無論實參是何種類型的量,在進行函數調用時,它們都必須有確定的值,以便把這些值傳送給形參

3.2 形式參數(形參):?

---形式參數是指函數名后括號中的變量,因為形式參數只有在函數被調用的過程中才實例化(分配內 存單元),所以叫形式參數。

---形式參數當函數調用完成之后就自動銷毀了。因此形式參數只在函數中有效。

>???上述例子中?Swap1 和 num2 和傳 給Swap2函數的 Swap2 函數中的參數 &num1 , x,y,px,py都是形式參數。

>? ?在main函數中傳給 Swap1 的 &num1 ,&num2 是實際參數。?

可以看到 Swap1 函數在調用的時候,x,y擁有自己的空間,同時擁有了和實參一模一樣的內容。 所以我們可以簡單的認為:形參實例化之后其實相當于實參的一份臨時拷貝。?

也就是說形式參數在使用時是根據輸入參數多少重新分配相應的內存,再進行計算,與輸入參數沒有本質聯系

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

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

相關文章

python怎么求因數

要想做到python語言求因數方法&#xff0c;首先要明白其中的原理&#xff1a; 1、對由123456789這九個數字組成的9位數進行分解質因數。 2、1234576982x3x3x7x13x23x29x113&#xff0c;所以他的值因數是113。 3、總共有362880種可能&#xff0c;從中找出值因數中最小的數字和…

一節課說明一類奧數題系列——約數與倍數

小學奧數-約數與倍數 約數和倍數&#xff1a;若整數 a 能夠被 b 整除&#xff0c;a 叫做 b 的倍數&#xff0c;b 就叫做 a 的約數。 公約數&#xff1a;幾個數公有的約數&#xff0c;叫做這幾個數的公約數&#xff1b;其中最大的一個叫做這幾 個數的最大公約數。a,b兩數的最…

學生宿舍反限電插座控制功能

石家莊光大遠通電氣有限公司反限電插座功能的技術防止學生通過半波整流進行防止學生改變負載特性(阻性變為非阻性)的防止學生通過可控硅調壓技術(進行功率調整達到使用目的)惡性負載限制次數設置:管理部門可以根據實際要求設定每個宿舍違規次數。達到本次數。系統自動鎖定&…

【LeetCode】快樂數

目錄 一、題目二、解法完整代碼 一、題目 編寫一個算法來判斷一個數 n 是不是快樂數。 「快樂數」 定義為&#xff1a; 對于一個正整數&#xff0c;每一次將該數替換為它每個位置上的數字的平方和。 然后重復這個過程直到這個數變為 1&#xff0c;也可能是 無限循環 但始終變…

Linux:Ubuntu18.04下開機自啟動QT圖形化界面

Linux&#xff1a;Ubuntu18.04下開機自啟動QT圖形化界面 Chapter1 Linux&#xff1a;Ubuntu18.04下開機自啟動QT圖形化界面一、創建rc.local文件二、建立rc-local.service文件三、啟動服務查看啟動狀態四、重啟 Chapter2 將QT應用作為開機自啟動&#xff08;Linux系統&#xff…

代碼能力弱,編程思維幾乎沒有,有些勉強能看懂,讓自己敲,一臉懵逼?

最近有幾個人問我&#xff0c;說自己代碼能力弱&#xff0c;編程思維幾乎也沒有&#xff0c;簡單的代碼&#xff0c;勉強能看懂&#xff0c;讓自己敲&#xff0c;就一臉懵逼&#xff0c;下一步該怎么學習&#xff1f; 10幾年前&#xff0c;這些問題&#xff0c;就像是一道道難以…

Redis數據結構和持久化

數據類型 String&#xff1a;Map<String,String> 命令格式 set key value(相同的key會覆蓋&#xff09; get key incr key decr key setex key seconds value seconds秒后失效 ttl key del key setnx ke value(if not exist) 應用場景 計數器 比如&#xff1a;訪問次…

1招搞定maven打包空間不足問題

目錄 一、工具應用問題 二 、使用效果 三、使用方法 四、練習手段 一、工具應用問題 使用maven的package功能打包失敗&#xff0c;報錯“Java heap space”錯誤。 二 、使用效果 修改IDEA中maven內存使用大小后&#xff0c;打包成功。 三、使用方法 點擊菜單“File->Set…

C++ 例外處理 try throw catch

例外處理 程式中可能會發生的錯誤有三種&#xff0c;分別是語法錯誤(syntax error) 、執行期間錯誤(runtime error) 及語意錯誤(semantic error) &#xff0c;其中編譯器會直接檢查出語法錯誤&#xff0c;如果含有語法錯誤的程式無法過編譯&#xff0c;例如 $ g u06.cpp u06.c…

【PythonRS】基于Python分塊處理大型遙感影像的方法

RSer工作時不可避免會用到大型的遙感影像,由于分辨率過高、區域過大、波段信息過多等原因,都會導致數據非常的大。這個時候我們在進行一些簡單的操作,如計算NDVI、二值化、分類等時,計算機的內存都會溢出。因此今天跟大家分享一下我平時分塊的方法,中間如何計算就按照自己…

Docker 使用基礎(3)—容器

&#x1f3ac;慕斯主頁&#xff1a;修仙—別有洞天 ??今日夜電波&#xff1a;秒針を噛む—ずっと真夜中でいいのに。 0:34━━━━━━?&#x1f49f;──────── 4:20 &#x1f504; ?? ? …

let/const/var的區別及理解

在JavaScript中&#xff0c;let、const 和 var 是用來聲明變量的關鍵字&#xff0c;但它們之間在作用域、變量提升、重復聲明等方面存在區別&#xff0c;詳細情況如下: 1. let、const、var 的區別 (1) 塊級作用域 let 和 const&#xff1a;具有塊級作用域&#xff0c;由 {} 包…

百數教學秘籍:三步走,輕松規劃你的自動化計劃任務

通過設定任務計劃&#xff0c;用戶可以輕松安排指定的功能插件或數據助手在特定時間自動執行&#xff0c;有效提高工作效率&#xff0c;還確保了數據的及時更新和處理。任務計劃在應用啟動時自動啟動并在后臺運行&#xff0c;無需用戶持續監控&#xff0c;為用戶帶來極大的便利…

oracle哪些后臺進程不能殺?

oracle 有很多的后臺進程&#xff0c;在遇到特殊情況的時候如鎖表&#xff0c;如果等待的是一個后臺進程&#xff0c;那這時就需要考量是不是能殺掉這個后臺進程&#xff1f;殺掉這個后臺進程會不會引起實例崩潰&#xff1f;本著實踐出真知&#xff0c;本文針對oracle 11g&…

游戲開黑語音-使用云服務器部署teamspeak服務(系統Ubuntu 20.04 LTS)

目錄 前置物品服務器調整及部署1.重裝系統2.換源3.下載teamspeak服務端并部署 連接服務器參考 前置物品 一臺云服務器&#xff08;系統&#xff1a;Ubuntu 20.04 LTS) 服務器調整及部署 1.重裝系統 在騰訊云官網的主機控制臺內&#xff0c;選擇重裝系統 (由于之前為了快點和…

【刷題匯總 -- 最長回文子串、買賣股票的最好時機(一)、[NOIP2002 普及組] 過河卒】

C日常刷題積累 今日刷題匯總 - day0101、最長回文子串1.1、題目1.2、思路1.3、程序實現 2、買賣股票的最好時機(一)2.1、題目2.2、思路2.3、程序實現2.4、程序實現 -- 優化 3、[NOIP2002 普及組] 過河卒3.1、題目3.2、思路3.3、程序實現 -- dp 4、題目鏈接 今日刷題匯總 - day0…

Excel中用VBA實現Outlook發送當前工作簿

Excel中用VBA實現Outlook發送當前工作簿&#xff0c;首先按AltF11打開VBA編輯器&#xff0c;插入模塊&#xff0c;并在工具-引用中勾選 Microseft Outlook .0 Object Library(其中為你Microseft Outlook的版本號。 Sub 發送郵件() 保存當前excel ThisWorkbook.Save讓excel連接…

Linux 入門教程 by 程序員魚皮

本文作者&#xff1a;程序員魚皮 免費編程學習 - 編程導航網&#xff1a;https://www.code-nav.cn 大家好&#xff0c;我是魚皮。 前兩天我學編程的老弟小阿巴過生日&#xff0c;我問他想要什么禮物。 本來以為他會要什么游戲機、Q 幣卡、鼠標鍵盤啥的&#xff0c;結果小阿巴…

模擬防止重復提交

gitee地址&#xff08;需要自取&#xff09;AopProxy重復提交: 防止重復提交 (gitee.com) RestController public class SubmissionController {Autowiredprivate SubmissionService submissionService;private static Jedis jedis new Jedis("localhost",6379);pr…

短視頻矩陣:批量發布的秘密揭秘

在數字化時代&#xff0c;短視頻已經成為一種廣受歡迎的媒體形式。無論是用于品牌推廣、產品營銷還是個人創作&#xff0c;短視頻都提供了一種直觀、生動的方式來吸引觀眾的注意力。然而&#xff0c;有效地制作、管理和發布短視頻對于許多創作者和企業來說是一個挑戰。 為此&am…