一、函數(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ù)聲明)
聲明的方法,最簡(jiǎn)單的就是把定義函數(shù)的第一句話抄過去,帶參數(shù)的函數(shù),可以直接抄過去,也可以參數(shù)的名字不寫,但是參數(shù)的類型必須要寫
函數(shù)的使用:
1.函數(shù)必須先定義再使用,如果想先使用,必須在使用它之前聲明它,聲明的方法,最簡(jiǎn)單的就是把定義函數(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]);
}