學習筆記之——C語言 函數

采用函數的原因:
隨著程序規模的變大,產生了以下問題:
——main函數變得相當冗雜
——程序復雜度不斷提高
——代碼前后關聯度提高,修改代碼往往牽一發而動全身
——變量使用過多,命名都成了問題
——為了在程序中多次實現某個功能,不得不重復多次寫相同的代碼
小甲魚將函數一部分作為自學內容放在課后作業s1e23里,要求自學 。閱覽后,認為講解不清,網上到處查詢 ??吹紺SDN里一篇詳解 , 認為可用,抄錄下來以備查詢 。(https://blog.csdn.net/qq_43469639/article/details/123765064)
1、 函數是什么
在維基百科中,對于函數的定義是子程序 。子程序是一個大型程序中的某部分代碼,由一個或多個語句塊組成,他負責完成某項特點的任務,而且相較于其他代碼,具備相對的獨立性 。
C語言中函數分為庫函數和自定義函數兩大類 。
2、 庫函數
為什么會有庫函數
2.1我們知道在我們學習C語言編程的時候,總是在一個代碼編寫完成后迫不及待的想要知道結果,想要把這個結果打印到我們的屏幕上看看,這個時候我們會頻繁的使用一個功能,將信息按照一定的擱置打印到屏幕上 。
2.2在編程的過程中我們會頻繁的做一些字符串的拷貝工作(strcpy)
2.3在編程時,我們也會計算,也總數會計算n的k次方這樣的運算
像上面我們描述的基本功能 , 他們不是業務性的代碼,我們在開發的過程中每個程序員都有可能用到,為了支持可移植性和提高程序的效率,所以C語言的基礎庫中提供了一些列類似的庫函數,方便程序員進行軟件開發 。
簡單總結,C語言常用的庫函數都有:
IO函數    printf  scanf   getchar   putchar
字符串操作函數   strcmp   strlen
字符操作函數   toupper
內存操作函數   memcpy  memcmp   menset
時間/日期函數   time
數學函數   pow  sqrt
其他庫函數
注:不同與作者,我的觀點是:庫函數精煉了大量人員需要重復使用的比較復雜的函數 , 并組裝成庫 , 方便調用 。其他語言也有類似情況 , 比如我認為python就是大量的各種應用場景比較小的庫的組合,使用時,根據規則調用即可直接使用 。
3、 自定義函數(前方高能,函數的精髓所在)
如果庫函數能干所有的事情,那還要程序員干什么,所以有更加重要的自定義函數
自定義函數和庫函數一樣 , 有函數名 , 返回值類型,函數參數,但是不一樣的是這些都是我們自己設計的,這給程序員一個很大的發揮空間 。
int add(int x,int y)//int 返回值類型  add為函數名   括號里為函數的參數
{
intz=0;
return z=x+y;
}
注:自定義函數是程序員為了滿足自己程序里的需要 , 避免重復輸入 , 或者簡化程序邏輯負責性 , 或者滿足庫函數以外的功能 , 自行編制的函數 。
4、 函數參數
函數的參數分為實際參數(實參)和形式參數(形參)
實參:在調用函數時傳遞給函數的參數
真實傳遞給函數的參數,叫做實參,實參可以是:常量、變量、表達式、函數等,無論實參是何種類型的量,在進行函數調用的時候,它們必須有確定的值,以便把這些值傳給形參 。
形參:在函數里,用于接收實參的參數
形式參數是指函數名后括號中的變量,因為形式參數只有在函數被調用的過程中才實例化(為形式參數分配內存單元),所以叫形式參數,形式參數當函數調用完成之后就自動銷毀了,因此形式參數只在函數中有效 。
函數例子:
#include<stdio.h>
int add(int x,int y) //這里為形式參數,用于接收實際參數的值
{
int z=0;
return z=x+y;
}
int main()
{
int a=0;
int b=0;
scanf(“%d  %d”,&a,&b);
add(a,b);  //這里是實際傳過去的參數,要與對應函數的參數類型和數量對應 。這里是為函數傳遞實際參數
return 0;
}
5、 函數的調用
傳值調用
函數的形參和實參分別占有不同的內存塊,對形參的修改不會影響實參
傳址調用
傳址調用是把函數外部創建變量的內存地址傳遞給函數參數的 一種調用函數的方式
這種傳參方式可以讓函數和函數外邊的變量建立起真正的聯系,也就是函數內部可以直接處理外部的變量

推薦閱讀