C語言函數 原來可這麼理解
1.C的設計原則是把函數作為程序的構成模塊。
2.函數是完成特定任務的程序代碼的自包含單元。函數一般有兩個功能,執行某些動作;返回一個值以供調用程序使用。
3.使用函數的好處,代碼重複利用;是程序更加模塊化。
4.通常把函數看作黑盒子,對於一定的輸入會產生特定的結果,而不用考慮內部實現,除非是函數的編寫者。這樣看待函數有助於把精力放在程序整體設計而不是具體實現細節。
5.編寫函數需考慮函數要的功能和函數與程序整體上的關係。
6.函數的聲明(ANCI C函數原型),告訴編譯器函數的類型,且需要在其他地方找到該函數的定義。
函數的定義,函數的具體實現,確切的指定了函數的具體功能。
函數的調用,導致該函數被執行。
想要一起學習C 的可以加裙二四八八九四四三零,有很多大神一起學習交流,有資源,然後可以訂閱轉發一下
函數必須先聲明後使用。函數定義在調用之前,可不聲明,函數定義在調用之後或在其他文件中,那麼調用之前必須先聲明。被調用函數聲明可在調用函數之外,也可在調用函數內任何可以放置變數聲明的位置。
7.函數聲明(ANCI C函數原型)
返回值類型 函數名(形參類型1 參數名1,形參類型2 參數名2);)(聲明了函數名,函數返回值類型,函數參數個數和類型)
返回值類型 函數名(形參類型1,形參類型2);(省略參數名)
int prinf(char *, ...);//不確定參數函數的聲明
void aaa(void);//無參數無返回值函數的聲明
int bbb(int m, int n);
int bbb(int, int);
舊式函數聲明:
void aaa();
int bbb();(只需要聲明函數返回值類型,不需要參數信息)
ANCI C函數原型的好處,通知編譯器更多信息,使其在編譯函數調用語句時能檢查更多錯誤。
8.函數定義
返回值類型 函數名(形參類型1 參數名1,形參類型2 參數名2)//函數頭
{
//函數體
}
int bbb(int m, int n)
{
//函數體
}
形式參量(形參)和定義在函數內部的變數一樣,是局部變數,是函數私有的。即時在函數外部使用同名的變數,也不會有任何衝突,它們是同名的,相互獨立的,互不相關的。
舊式函數定義:
int bbb(m , n)
int m,n;
{
//函數體
}
9.函數調用
函數名(實參1, 實參2);
aaa();
bbb(12, 5);
想要一起學習C 的可以加裙二四八八九四四三零,有很多大神一起學習交流,有資源,然後可以訂閱轉發一下
形式參量(形參)是被調用函數中的變數(在函數頭中聲明),實際參數(實參)是調用函數傳遞給被調用函數的形參的特定數值。傳遞是複製操作,就是說被調用函數中對複製數值做的任何操作,都不會影響調用函數中的原數值。
函數調用的時候,將創建形參(局部變數),並將用實參作初始化。
10.使用return語句從函數中返回一個值,並終止函數的執行,將程序控制權交給調用函數的下一條語句。一般是函數體最後一條語句。該值就是函數的返回值,被存儲在一個匿名變數中。因此,函數調用語句可用來賦值和參與運算。
若return返回的值類型與函數定義的返回值類型不一致,會被自動轉換成定義的返回值類型。
函數之間的關係,調用與被調用;函數之間通過參數與返回值進行通信。C中所有函數同等地位,都可以調用其他函數或著被調用。
11.C允許一個函數調用其自身,這種調用過程稱為遞歸。
遞歸原理:
每一級函數都有自己的私有變數;
每一次函數調用都會有一次返回;
函數中,位於遞歸調用前的語句和各級被調用函數擁有相同的執行順序,位於遞歸調用之後的語句與各級被調用函數執行順序相反;
雖然每一級函數都有自己的私有變數,但函數代碼並不會得到複製;
遞歸函數中必須包含可以終止遞歸調用的語句。
尾遞歸,就是把遞歸調用放在函數末尾,return語句之前。尾遞歸的作用相當於循環語句。
遞歸的缺點,會很快佔用大量內存。
12.多源代碼文件的編譯
main函數在一個源文件中,自定義函數在一個源文件中,函數原型和常量定義放在頭文件中。
13.指針
指針就是內存地址,表現為無符號整數,通常是16進位格式。
指針變數(簡稱指針)是存放地址的變數。
指針的聲明:
int * point;//指向一個整數變數的指針,數據類型是int *,*表示point是指針變數,int表示point指向一個整數變數。
char * chr;//指向一個字元變數的指針
float * flt;//指向一個單精度浮點數變數的指針
指針運算符:間接運算符(取值符)*,地址運算符(取地址符)&
&後跟一個變數名,&給出變數的地址,*後跟一個指針變數或地址,*給出存儲在被指向地址中的值。
int a = 10, b;
int * point, * point2;
point = &a;
b = *point;
編寫程序時,變數有三個屬性,變數的名字,類型,數值;編譯載入後,變數有兩個屬性,地址和數值。變數的地址可以看作在計算機中的名稱。
14.指針作為函數的參數
將調用函數變數的指針作為實參傳遞給被調用函數的形參,可以改變調後函數的變數。
不要將被調用函數變數的指針作為返回值傳遞給調用函數,因為局部變數的生命周期在被調用函數執行完就結束了,被釋放了,調用函數後續使用該值回造成錯誤。
想要一起學習C 的可以加裙二四八八九四四三零,有很多大神一起學習交流,有資源,然後可以訂閱轉發一下


※C語言編程——查詢自動售貨機中商品價格
※C語言編程——統計英文字母個數
※C語言程序設計很難?入門學習5部曲帶你上車!小白福利!
※C語言從入門到進階,少走很多彎路,你選對了嗎!
※盤點C語言編程常見的幾大陋習,你中招了嗎?現在改還來得及!
TAG:C加加 |
※原來,你是這樣的R語言
※比開口說另一種語言更難的,是「關掉」原來的語言|PNAS 論文推薦
※8國語言智能識別翻譯,圖片轉成文字原來這麼簡單
※彙編語言比c語言快,這是誤會
※C語言得分令你崩潰?了解一下原因?
※一文帶你讀懂自然語言處理-事件提取
※一文帶你讀懂自然語言處理-事件提取
※如何用簡單易懂的語言來介紹量子物理?
※語言能否表達作為最高原理的「道」?
※數據結構與演算法分析——C語言描述
※c語言 實現一個函數,判斷一個數是不是素數
※比開口說另一種語言更難的,是「關掉」原來的語言
※為什麼漢語被評為世界上最難的語言?看了這個才知道原因這麼簡單
※C語言動態內存分配基礎知識詳解
※智能語言「嗨森」一下,知你言懂你心
※寶寶多大可以「說整句話」?語言發育「單句期」來了解一下
※德勤英文語言理解真題
※為什麼說C語言不是低級語言?
※如何理解狗狗的尾巴「語言」?
※一文助你解決90%的自然語言處理問題