App下載

從零開(kāi)始學(xué)習(xí)C語(yǔ)言丨函數(shù)的定義、調(diào)用和參數(shù)

來(lái)源: 三玹 2022-11-10 15:39:49 瀏覽數(shù) (3553)
反饋

 本文發(fā)布于微信公眾號(hào):三玹

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


C

2 人點(diǎn)贊