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