本文發(fā)布于微信公眾號:三玹
在前面的文章中,我們其實有見過函數,就是C語言程序有且僅有一個的主函數 main()。因此,可以說C語言程序中至少都會有一個函數。
函數,也被稱為方法,是一組一起執(zhí)行一個任務的語句。做菜是需要洗菜、切菜、炒菜、然后把菜盛出來端上桌。如果沒有函數,代碼上我們每次就都要把這些步驟一個一個地寫清楚,做一道菜寫一堆這樣的步驟。
但是有了函數就不一樣了。我把這些步驟都整合在一起,把它變成一個函數,等我需要做菜的時候,就只需要把這個函數拿出來用。誒,這就比每次都要寫一大堆東西輕松得多,就非常方便!type function(parameter list)
{
// body
}
1、type:函數返回的類型,如 int、float、char等等,這類有明確返回類型的函數,結果都必須有 return 關鍵字返回相應類型的數據。如果函數不返回類型,則可以使用 void 空類型來定義函數。
2、function:函數的名稱。名稱必須符合標識符的規(guī)則,同時建議函數名稱可以按照駝峰式寫法(大駝峰:YouHaveMoney 或者小駝峰:tomorrowIsBetter)。
3、parameter:函數的參數列表,可以有,可以沒有,實際情況根據函數的主體內容進行決定。相當于一個占位符。4、body:函數的主體部分。即把所有做菜的步驟都包括在這里面,當調用函數的時候,就會順序執(zhí)行這里面的內容。
函數編寫之后,想進行實際應用,那就需要調用。如果不調用,函數寫了跟沒寫一樣。他就在那里,你不呼喚他,他是沒有回應的。
#include<stdio.h>
int main(){
HelloWorld();
return 0;
}
void HelloWorld(){
printf("Hello World\n");
}
那么有人就要說,程序是按順序執(zhí)行的,那我直接把 HelloWorld 這個函數直接寫在主函數里面,那么它運行的時候不也是按順序執(zhí)行,是不是就不用調用了。在C語言當中,循環(huán)是可以嵌套的、判斷也是可以嵌套的,但是函數是不能嵌套定義的。函數的定義只能在函數體之外進行定義,無法在函數體內定義新的函數。不過可以嵌套使用,在一個函數里面調用另外一個函數,就可以實現函數的嵌套使用。#include<stdio.h>
int main(){
func2();
return 0;
}
void func1(){
printf("讀者都是英俊瀟灑!美若天仙!\n");
}
void func2(){
func1();
printf("求個點贊、收藏和分享,可好?");
}
函數的調用還有一種方式,叫做遞歸調用,俗一點講就是我自己用自己。這一個遞歸稍微講起來有點復雜,就暫且不在這里作詳細展開,后面涉及到遞歸的時候再說說。前文提到,參數的在函數中相當于是一個占位符的作用。x 和 y 就是函數中的參數,它實際是什么值我不知道,但我知道它們兩個相加是等于10。那么 x 和 y 的實際值可以有無限種可能,x 和 y 在這里就是占個位置,表示一個虛的數值。就例如,我們要計算兩個值相加的值,但是不知道用戶實際應用要輸入什么值。那這里就可以使用參數來占個位置。int add(int a, int b){
return a+b;
}
在程序中,參數是有兩種分類的:形式參數和實際參數。
形式參數,顧名思義,就是形式上的,做個樣子,沒有實際X用。
一般,函數定義時候的參數,就叫做形式參數。它們沒有實際的值,只是擺個樣子,在這里占個位置。一般是在函數調用的時候,傳遞給函數的值就叫做實際參數。#include<stdio.h>
int main(){
int x = 5;
int y = 9;
int z = add(x, y);
printf("%d", z);
return 0;
}
int add(int a, int b){
return a+b;
}
在這里面,add 函數定義時,變量 a 和 b 就是形式參數。
在主函數中調用 add 函數時,傳入的變量 x 和 y 就是實際參數。