一函數
1.函數的基本概念
函數就是把代碼中功能相似并且獨立的代碼單獨封裝成一個整體;
(1)函數優點
提高代碼的簡潔性,挺高開發效率
提高代碼的重用性
有利于程序的維護
(2)函數的分類
系統函數:
由C標準庫提供的函數;如:printf()scanf()gets()
用系統函數時,只需將其對應的頭文件包含起來,即可
exampl:
#include<stdio.h>------>printf("hello!");
pow(a,b);------>計算a的b次方
自定義函數:
用戶根據需要自己定義的函數;
分類二:
有返回值函數:
函數調用結束后,會返回一個數值給主調函數;
無返回值函數;
函數結束后,無返回值,一般定義為viod函數,即空類型
分類三:
有參函數:
參數可以任意多
無參函數:
2.函數的基本定義L
(1)無參函數的定義
DataType FunctionName()
{
//函數體
//可執行語句
}
注:函數名背后的括號不可以省略!!!
(2)有參函數的定義
DataType FunctionName(Type arg1,Type arg2)---->(括號內為參數列表)
{
//函數體
}
注:參數列表可以有多個,參數的類型可以任意(相對)!
(3)函數的定義,函數的聲明以及函數的調用
函數的定義
DataType FunctionName(參數列表);
{
//函數體
}
函數的聲明:
DataType FunctionName(參數列表);
注:
聲明時,參數列表一定要和定義時的參數列表一致!!!
后面的分號不可省略!!
放在函數被調用之前的任意
函數的調用;
FunctionName(value);
value:數值
注:
函數調用時,實參的類型,一定要和函數定義時的形參列表一致!
實參:
實際參數,即具體的數值
函數調用時的參數都是實參
形參;
形式參數,形參的定義和普通變量的定義無區別
函數定義及聲明時的參數
注:函數名表示函數的入口地址,函數之間沒有優先級問題,函數之間是等價的,即平行關系!!!
形參在發生調用時分配空間!!!
在發生我那個函數調用時,系統會默認將實參的值付給形參
3.函數的返回值
無返回值的類型函數類型為:void
DataType FuncName(參數列表)
{
//函數體
}
DataType:決定了函數的返回值類型;
若是int;則函數返回值為int類型
若是double;則函數返回值為double類型
如果函數的返回值能夠在后面的程序中使用,則需要相同類型的變量接收返回值
若是void類型的函數,則無返回值,return可有可無!!!
若返回值不是void類型,則必須要有return!!!
4.return的作用
(1)函數遇到return,則結束后面的代碼不執行
(2)用于返回函數的值即執行結果
5.關鍵字
(1)變量分為全局變量和局部變量
全局變量:
在函數體之外定義的變量
其作用域是從變量定義處開始的,一直到本文的結束!!!
在全局變量定義之前不可使用全局變量
局部變量:
在函數中定義的變量,作用域:整個函數
函數結束時,局部變量會自動消亡!
因此不同的函數中可以使用相同的變量名。
若局部變量和全局變量重名,則全局變量對局部變量不可見
auto:
聲明變量是動態變量
可以省略,如:
動態全局變量:
生命周期:整個函數運行期間
動態局部變量:
生命周期:僅限于定義該變量的函數中
auto int a = 5;
int b = 4;
static:
聲明變量為靜態變量;
作用域:從定義處開始,到文件結束
聲明周期:整個程序運行期間。
靜態變量,若定義是沒有初始化,則系統默認為初始化為:0!
靜態變量只初始化一次!!!
靜態函數:static修飾函數,則此函數只能用于本文件
其他文件不可使用!!!
extern:
聲明為外部變量:extern int sum;
修飾函數:extern int test();
聲明變量或函數在外部已定義;
register:
寄存器變量:變量直接存放在寄存器中
CPU的寄存器個數有限,不可以定義多個寄存器變量
速度快
const:
常量(只讀變量),不可修改其值
const int num = 5;
int const num = 5;
const int p;值不可改
int const p;值不可改
int const p;地址不可改
const int const p;地址和值不可改
6.函數的傳遞
值傳遞
地址傳遞
7.指針函數和函數指針
指針函數:
int test();
返回一個局部地址是不允許的,沒有意義
注意返回值問題,返回的是一個地址!!!
函數指針:
int (pa)()