1、函數的聲明
在C和C 的程序裡,完成一項工作的一種典型的方式就是調用一個函數去做那件事。定義函數是程序員刻畫怎樣完成某個操作的一種方式。一個函數只有先聲明後才能夠調用。
在一個函數的生命中,需要給出函數的名字,這個函數返回值的類型,以及在調用這個函數的時候必須提供的參數的個數和參數類型。看如下聲明:
void fun(x,y) ;//這種聲明是毫無意義的,因為參數類型未知。
2、函數的定義
在程序中調用某個函數,首先必須在某個地方定義(僅僅定義一次)。一個函數的定義也就是給出了函數體的函數聲明。例如:
extern void swap(int * ,int *); //聲明
void swap(int *p, int *q)
{
int t = *p;
*p = *q;
*q = t;
}
函數的定義和對它的所有聲明都必須描述了同樣的類型,由於參數名不作為類型的一部分,因此參數名字不必保持一致。
3、靜態變量
局部變量會在線程達到其定義的時候進行初始化。按照默認方式,這樣的事情發生在每次函數被調用的時候,且函數的每一個調用都有自己的一份局部變量的副本。但是,當局部變量被聲明為static時,它將只有唯一的一個靜態對象,對它的初始化只發生在線程第一次執行到它的定義時進行。
看下面的程序:
#include<iostream>
using namespace std;
void showstatic(int a)
{
while(a--)
{
static int n = 0; //初始化一次
int x = 0; //在每個showstatic()調用時初始化a次
cout<< "n == "<<n <<",x == "<<x <<endl;
}
}
int main()
{
showstatic(3);
}
此程序的輸出為:
n == 0,x == 0
n == 1,x == 0
n == 2,x == 0
從上面的輸出可以看出,static int n 只有在函數第一次調用時被初始化為0,而局部變量x在函數每次執行到int x時都被初始化為0。