目錄
1. 函數(shù)是什么
2. 庫函數(shù)?
3. 自定義函數(shù)?
4. 函數(shù)參數(shù)?
4.1實際參數(shù)(實參)?
4.2形式參數(shù)(形參)?
5.函數(shù)的調(diào)用
5.1傳值調(diào)用
5.2傳址調(diào)用 (傳遞地址)
6. 函數(shù)的嵌套調(diào)用和鏈式訪問?
6.1 嵌套調(diào)用?
6.2 鏈式訪問?
7. 函數(shù)的聲明和定義?
7.1 函數(shù)聲明
?7.2函數(shù)定義
1. 函數(shù)是什么
函數(shù)是一段可以執(zhí)行特定任務(wù)的代碼塊。它可以接受輸入?yún)?shù)并返回一個值。函數(shù)使得代碼可以被模塊化,重復(fù)使用,并提高代碼的可讀性和可維護性?
2. 庫函數(shù)?
庫函數(shù)是由編譯器或操作系統(tǒng)提供的函數(shù),用于執(zhí)行常見的任務(wù),如輸入輸出、字符串處理、數(shù)學計算等。庫函數(shù)可以直接使用,不需要額外的編寫和編譯?
下面是一個使用庫函數(shù)的示例代碼,計算并打印正弦值:
#include <stdio.h>
#include <math.h>
int main() {
double angle = 30;
double sinValue = sin(angle);
printf("Sin value of %lf degrees: %lf\n", angle, sinValue);
return 0;
}
其中各種庫函數(shù)及其對應(yīng)的頭文件可以去cplusplus.com? 查看,接下來我給出一個實例:
?
?同時也能幫助到各位理解上面的代碼,c語言中庫函數(shù)亦不少,本文便不進行大量闡述。日后我會再寫文章來詳細講解。
3. 自定義函數(shù)?
自定義函數(shù): 自定義函數(shù)是由程序員根據(jù)需求自行編寫的函數(shù)。它們可以完成特定的任務(wù),并可以通過函數(shù)名調(diào)用執(zhí)行。自定義函數(shù)在代碼中經(jīng)常被使用,可以提高代碼的模塊化和可重用性。
- ret_type是返回值的類型
- fun_name是自定義函數(shù)名
- para1是函數(shù)的形式參數(shù)
下面是一個自定義函數(shù)的示例代碼,用于計算兩個整數(shù)的和:
#include <stdio.h>
// 自定義函數(shù),用于計算兩個整數(shù)的和
int add(int a, int b) {
return a + b;
}
int main() {
int x = 5;
int y = 10;
int sum = add(x, y);
printf("Sum: %d\n", sum);
return 0;
}
4. 函數(shù)參數(shù)?
4.1實際參數(shù)(實參)?
函數(shù)的實際參數(shù)是在函數(shù)調(diào)用時傳遞給函數(shù)的值。實際參數(shù)可以是常量、變量、表達式或其他函數(shù)的返回值。實際參數(shù)的值被傳遞給函數(shù)的形式參數(shù),從而在函數(shù)內(nèi)部使用。實際參數(shù)的值可以影響函數(shù)的行為和結(jié)果。?
4.2形式參數(shù)(形參)?
形式參數(shù)是在函數(shù)定義中聲明的變量,用于接收函數(shù)調(diào)用時傳遞的實際參數(shù)的值。形式參數(shù)在函數(shù)定義中起到占位符的作用,它們的值在函數(shù)調(diào)用時由實際參數(shù)提供。形式參數(shù)只在函數(shù)內(nèi)部可見,其作用域僅限于函數(shù)內(nèi)部。?
下面用代碼事例來進一步闡述:?
#include <stdio.h>
// 函數(shù)定義,使用形式參數(shù)
void printSum(int a, int b) {
int sum = a + b;
printf("Sum: %d\n", sum);
}
int main() {
int x = 5;
int y = 10;
// 函數(shù)調(diào)用,使用實際參數(shù)
printSum(x, y);
return 0;
}
在上述示例代碼中,我們定義了一個名為printSum()
的函數(shù),它接受兩個形式參數(shù)a
和b
。在main()
函數(shù)中,我們聲明了兩個整數(shù)變量x
和y
,并將它們作為實際參數(shù)傳遞給printSum()
函數(shù)。在printSum()
函數(shù)內(nèi)部,形式參數(shù)a
和b
接收到相應(yīng)的值,并計算它們的和。最后,在函數(shù)中打印出結(jié)果?
需要注意的是:形參實例化之后其實相當于實參的一份臨時拷貝,想要改變參數(shù)的值,單單傳值操作是不行的哦,我們要進行傳址操作(后面講)
5.函數(shù)的調(diào)用
5.1傳值調(diào)用
傳值調(diào)用是指在函數(shù)調(diào)用時,將實際參數(shù)的值復(fù)制給形式參數(shù),二者的地址是不同的,即函數(shù)的形參和實參分別占有不同內(nèi)存塊,對形參的修改不會影響實參?
5.2傳址調(diào)用 (傳遞地址)
- 傳址調(diào)用是把函數(shù)外部創(chuàng)建變量的內(nèi)存地址傳遞給函數(shù)參數(shù)的一種調(diào)用函數(shù)的方式。
- 這種傳參方式可以讓函數(shù)和函數(shù)外邊的變量建立起真正的聯(lián)系,也就是函數(shù)內(nèi)部可以直接操 作函數(shù)外部的變量。
接下來用一段代碼來詳細說明:
void changeValue(int *ptr) {
*ptr = 10;
printf("Inside function: %d\n", *ptr);
}
int main() {
int x = 5;
printf("Before function call: %d\n", x);
changeValue(&x);
printf("After function call: %d\n", x);
return 0;
}
?此為傳地址調(diào)用:可以清楚地發(fā)現(xiàn),x的值被改變了
-------------------------------------------------------------------------------------------------------------------------------?
傳值?
void changeValue(int ptr) {
ptr = 10;
printf("Inside function: %d\n", ptr);
}
int main() {
int x = 5;
printf("Before function call: %d\n", x);
changeValue(x);
printf("After function call: %d\n", x);
return 0;
}
而傳值調(diào)用發(fā)現(xiàn):根本改變不了,再結(jié)合之前的說明相信各位更加能理解清楚了
6. 函數(shù)的嵌套調(diào)用和鏈式訪問?
6.1 嵌套調(diào)用?
函數(shù)的嵌套調(diào)用是指在一個函數(shù)內(nèi)部調(diào)用另一個函數(shù)。這種調(diào)用方式可以實現(xiàn)函數(shù)的層層嵌套,每個函數(shù)負責不同的功能,使代碼結(jié)構(gòu)更加清晰和模塊化。通過函數(shù)的嵌套調(diào)用,可以將復(fù)雜的問題分解成更小的子問題,并通過調(diào)用不同的函數(shù)來解決這些子問題?
int multiply(int a, int b) {
return a * b;
}
int add(int a, int b) {
return a + b;
}
int main() {
int x = 5;
int y = 3;
int result = multiply(add(x, y), y);
printf("Result: %d\n", result);
return 0;
}
定義了兩個函數(shù)
multiply()
和add()
,分別用于實現(xiàn)乘法和加法運算。在main()
函數(shù)中,我們聲明了兩個整數(shù)變量x
和y
,并將它們作為實際參數(shù)傳遞給add()
函數(shù)。add()
函數(shù)返回x + y
的結(jié)果,然后將這個結(jié)果作為實際參數(shù)傳遞給multiply()
函數(shù)。最后,multiply()
函數(shù)返回result * y
的結(jié)果,這個結(jié)果被賦值給變量result
?
6.2 鏈式訪問?
把一個函數(shù)的返回值作為另外一個函數(shù)的參數(shù)?
printf("%d", printf("%d", printf("%d", 43)));
-
?第一個printf打印32,返回值是2
- 所以第二個printf打印2,返回值是1
- 第三個printf答應(yīng)1
7. 函數(shù)的聲明和定義?
7.1 函數(shù)聲明
函數(shù)的聲明是指在使用函數(shù)之前事先告訴編譯器函數(shù)的名稱、返回類型和參數(shù)列表?。函數(shù)的聲明一般出現(xiàn)在函數(shù)的使用之前。要滿足先聲明后使用
?7.2函數(shù)定義
// 聲明函數(shù)
int add(int a, int b);
// 定義函數(shù)
int add(int a, int b) {
return a + b;
}
int main() {
int x = 5;
int y = 3;
int result = add(x, y);
printf("Result: %d\n", result);
return 0;
}
聲明了一個函數(shù)
add()
,告訴編譯器函數(shù)的名稱、返回類型和參數(shù)列表。然后,在源文件中定義了這個函數(shù),提供了具體的實現(xiàn)代碼。在main()
函數(shù)中,我們調(diào)用了add()
函數(shù),傳遞了兩個實際參數(shù)x
和y
,并將返回值賦值給變量result
。最終,在main()
函數(shù)中打印出result
的值?
函數(shù)的聲明和定義可以分開進行,也可以合并在一起。如果函數(shù)的聲明和定義在同一個源文件中,函數(shù)處于前方,可以省略函數(shù)的聲明,直接定義函數(shù)即可。如果函數(shù)的聲明和定義分開在不同的源文件中,需要在使用函數(shù)之前先進行函數(shù)的聲明?。文章來源:http://www.zghlxwxcb.cn/news/detail-623066.html
這次先到這里的,下次會進行函數(shù)遞歸和數(shù)組的詳細講解的。謝謝大家?。?!?文章來源地址http://www.zghlxwxcb.cn/news/detail-623066.html
到了這里,關(guān)于c語言基礎(chǔ)知識幫助理解(詳解函數(shù))的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!