C語言的函數與java、C++(面向對象)的函數不太一樣
1、爲什麼需要函數
模塊化;
避免了重複性的操作;
C語言的基本單位是函數
2、什麼叫做函數
邏輯上:能夠完成特定功能的獨立的代碼塊
物理上:
能夠接受數據【也可以不接受】
能夠對數據進行處理
能夠將處理後的結果返回【也可以不返回】
總結:函數是個工具,它是爲了解決大量類似問題而設計的
函數可以當做一個黑匣子
3、如何定義函數
函數的返回值 函數的名字(函數的形參列表)
{
函數的執行體
}
(1)函數定義的本質是詳細描述函數之所以能夠實現某個特定功能的具體實現方法;
(2)return表達式的含義
1>終止被調函數,向主調函數返回表達式的值
2>break是終止循環,而return是終止函數
3>如果表達式爲空,則只終止函數,不向主調函數返回任何值
例子:
void f()
{
return;//return只用來終止函數,不向主調函數返回任何值
}
int f()
{
return 10;//第一終止函數,第二 向主調函數返回表達式的值
}
(3)函數返回值的類型也稱爲函數的類型,因爲如果函數名前的返回值類型和函數執行體中
的return表達式中表達式類型不同的話,則最終函數返回值的類型以函數名前的返回值類型爲準。
#include<stdio.h>
int f()
{
return 10.9; //該函數返回的值以函數名前的類型爲準。
}
int main(void)
{
int i=99;
i=f();
printf("%d\n",i);
return 0;
}
4、函數的分類
有參函數 無參函數
有返回值函數 無返回值函數
庫函數 用戶自定函數
【值傳遞函數 地址傳遞函數】
普通函數 主函數(main函數)
主函數是程序的入口,也是程序的出口,普通函數不能調用主函數;普通函數可以互相調用
5、注意的問題
1>編寫函數的時候要單一,不能太複雜,方便多處利用
2>函數調用和函數定義的順序
如果函數調用寫在了函數定義的前面,則必須加函數前置聲明
函數前置聲明:
(1)告訴編譯器即將可能出現的若干個字母代表的是一個函數
(2)告訴編譯器即將可能出現的若干個字母所代表的函數的形參和返回值的具體情況
(3)函數聲明是一個語句,末尾必須加分號
(4)對庫函數的聲明是通過#include<庫函數所在的文件的名字.h>來實現的
形參和實參
個數相同 位置一一對應 數據類型必須相互兼容
【重點難點】
如何在軟件開發中合理的設計函數來解決實際問題?
一個函數的功能儘量獨立,單一
多學習多模仿牛人的代碼
6、常用的系統函數
double sqrt(double x)
求X的平方根
int abs(int x)
求X的絕對值
double fabs(double x)
求x的絕對值
7、變量的作用域和存儲方式
按作用域分爲:
全局變量
在所有函數外部定義的變量叫全局變量
全局變量使用範圍:從定義位置開始到整個程序結束
局部變量
在一個函數內部定義的變量或者函數的形參 都統稱爲局部變量
void f(int i)
{
inr j = 20;
}
i和j都屬於局部變量
局部變量的使用範圍:只能在本函數內使用
注意的問題:
全局變量和局部變量命名衝突的問題
在一個函數內部如果定義的局部變量的名字和全局變量名一樣時,局部變量會屏蔽掉全局變量
按存儲方式:
靜態變量
自動變量
寄存器變量