一、函數(shù)的定義:
1玩讳、函數(shù):函數(shù)是具有某一特定功能的若干代碼的集合涩蜘,當(dāng)需要使用這些代碼實(shí)現(xiàn)該項(xiàng)功能的時(shí)候調(diào)用該函數(shù)的名字即可。
定義一個(gè):
函數(shù)的返回值類型 函數(shù)名(函數(shù)參數(shù)類型 參數(shù)名a熏纯,函數(shù)的參數(shù)類型 參數(shù)名b)
{
函數(shù)體同诫;
}
int func(int a,int b) //函數(shù)的定義
{
printf("%d %d\n",a,b);
return 0;
}
func(1,2); //函數(shù)的調(diào)用
注:1.函數(shù)原則上可以有無數(shù)個(gè)參數(shù),但通常就3個(gè)左右樟澜,也可以不帶參數(shù)
2.各參數(shù)之間用逗號(hào)分割
3.函數(shù)如果沒有返回值误窖,那么函數(shù)返回值類型為void,在函數(shù)結(jié)尾可以寫return秩贰;也可以不寫
4.如果函數(shù)有返回值霹俺,那么它返回什么值,函數(shù)的返回值類型就是相應(yīng)的類型毒费。
5.原則上一個(gè)函數(shù)只能最多有1個(gè)返回值丙唧。
函數(shù)的聲明:如果函數(shù)的定義在調(diào)用的后面,在調(diào)用之前聲明函數(shù)蝗罗,建議函數(shù)的定義放在調(diào)用的前面(不用函數(shù)聲明)
聲明的方法艇棕,最簡單的就是把定義函數(shù)的第一句話抄過去,帶參數(shù)的函數(shù)串塑,可以直接抄過去沼琉,也可以參數(shù)的名字不寫,但是參數(shù)的類型必須要寫
函數(shù)的使用:
1.函數(shù)必須先定義再使用桩匪,如果想先使用打瘪,必須在使用它之前聲明它,聲明的方法傻昙,最簡單的就是把定義函數(shù)的第一句話抄過去闺骚,帶參數(shù)的函數(shù),可以直接抄過去妆档,也可以參數(shù)的名字不寫僻爽,但是參數(shù)的類型必須要寫
2.使用函數(shù)通過調(diào)用該函數(shù)的名字,有帶參數(shù)的函數(shù)要給它傳遞參數(shù)進(jìn)去贾惦,不帶參數(shù)的不傳
2胸梆、函數(shù)定義的注意點(diǎn):
1敦捧、函數(shù)定義不能嵌套定義(不能放在其他函數(shù)內(nèi))
2、函數(shù)除了main函數(shù)外碰镜,其他函數(shù)定義時(shí)兢卵,返回值類型不能省略。
3绪颖、如果函數(shù)的返回值是int float double char 指針等秽荤,函數(shù)必須要加return 返回值變量,
return后面的值的數(shù)據(jù)類型必須要與函數(shù)返回值的數(shù)據(jù)類型保持一致柠横。
4窃款、void:空類型
5、函數(shù)定義和聲明后面的()里面的內(nèi)容必須一致牍氛,函數(shù)參數(shù)名可以不寫雁乡,但類型必須寫。
6糜俗、
3、變量的作用區(qū)域分為:
全局變量:在函數(shù)外面定義的變量(要在程序開始的時(shí)候(所有函數(shù)前面定義)定義全局變量)曲饱;全局有效悠抹。
局部變量:是在函數(shù)內(nèi)部定義的變量,在函數(shù)內(nèi)部使用扩淀。
注意:變量作用域決定變量的可訪問
當(dāng)局部變量和全局變量重名的時(shí)候楔敌,以最后見到的變量為準(zhǔn)。
變量的存儲(chǔ)方式:
靜態(tài)存儲(chǔ):
動(dòng)態(tài)存儲(chǔ):
4驻谆、
auto:自動(dòng)變量卵凑,函數(shù)結(jié)束,則變量消失胜臊,空間釋放勺卢。 int a=9;其實(shí)是 auto int a=9象对;
static:靜態(tài)變量,聲明出來必須有唯一確定值黑忱。
當(dāng)程序開始使用的時(shí)候給變量開辟空間,直到程序結(jié)束后變量才消失勒魔,空間才釋放
當(dāng)程序第一次調(diào)用時(shí)保留這次調(diào)用的值甫煞,下次再使用時(shí)保留上一次的值
const:只能讀取,不可修改
1》 int const a冠绢;const int a抚吠;等同
int a=1;
2》 int * const p弟胀;//p這個(gè)變量只讀楷力,將來這個(gè)指針只能指向a喊式。
3》 const int *p;//使用p訪問這個(gè)變量只讀
4》 const int * const p弥雹;//使用p訪問這個(gè)變量只讀垃帅,p這個(gè)變量只讀,將來這個(gè)指針只能指向a
二剪勿、傳參類型實(shí)例:
-------------------------------------無參數(shù)
include <stdio.h>
void Print(); //如果函數(shù)的定義在調(diào)用的后面贸诚,在調(diào)用之前聲明函數(shù)
void main()
{
Print();//函數(shù)的調(diào)用
}
void Print()//定義函數(shù)
{
printf("i am very good\n");
}
-----------------------------------有1個(gè)參數(shù)
include <stdio.h>
int Print(int);
void main()
{
int b=5;
int c;
c=Print(b); //a=b 賦值是個(gè)拷貝的過程
printf("c=%d\n",c);
}
int Print(int a)//函數(shù)的定義
{
printf("a=%d\n",a);
return a;
}
--------------------------------------------有一個(gè)指針參數(shù)
void swap(int *p,int q)//交換兩個(gè)數(shù)的值
{ int tmp=p;
p=q;
*q=tem;
}
int main()
{
int a=3,b=4;
swap(&a,&b);//指針參數(shù) 傳地址,從地址上改變兩個(gè)數(shù)的值
printf("a=%d b=%d\n"a,b);
}
怎么向一個(gè)函數(shù)里面?zhèn)鞯刂罚?/p>
include <stdio.h>
void Print(int *); //參數(shù)是地址的時(shí)候
void main()
{
int a=5;
Print(&a); // int *p=&a
}
void Print(int p)
{
printf("a=%d\n",p);
}
---------------------------向一個(gè)函數(shù)里傳遞數(shù)組:
方法1:
include <stdio.h>
void Print(int a[]); //參數(shù)是數(shù)組 函數(shù)聲明
void main()
{
int b[5]={1,2,3,4,5};
int k=sizeof(b)/sizeof(int);//計(jì)算數(shù)組中數(shù)據(jù)的個(gè)數(shù)
Print(b厕吉,k);
}
//定義一個(gè)函數(shù)
void Print(int a[]酱固,int size) //參數(shù)是指針
{
int i=0;
for(i=0;i<size;i++)
printf("%d\n",a[i]);
}
方法2:
include <stdio.h>
void Print(int *);
void main()
{
int b[5]={1,2,3,4,5};
int k=sizeof(b)/sizeof(int);//計(jì)算數(shù)組中數(shù)據(jù)的個(gè)數(shù)
Print(b,k);
}
void Print(int *a头朱,int size) //參數(shù)是指針
{
int i=0;
for(;i<size;i++)
printf("%d ",a[i]);
}