1.概念:

函式是一個完成特定功能的程式碼模組,其程式程式碼獨立,通常要求有返回值,也可以是空值。

一般形式如下:<資料型別><函式名稱>(<形式引數說明>)

{

語句序列:

return[(<表示式>)];

}

其中:

<函式名稱>是一個識別符號,要求符合識別符號的命名規則:

<資料型別>是整個函式的返回值型別,如無返回值應該寫為void型;

<形式引數說明>是逗號","分隔的多個變數的說明形式,通常簡稱為形參;

大括弧對{<語句序列>},稱為函式體;

<語句序列>是大於等於零個語句構成的;

注意:在函式體中,表示式語句裡使用的變數必須事先已有說明,否則不能使用。

return[<表示式>]語句中表達式的值,要和函式的<資料型別>保持一致;

如函式的<資料型別>為void可以省略或者無表示式結果返回(即寫成return;)

2.函式之間的引數傳遞方式

1>複製傳遞方式

  複製傳遞方式是函式間傳遞資料常用的方式。呼叫函式將實參傳遞給被呼叫函式,被呼叫函式將建立同類型的形參並用實參初始化。即把實參賦給一個新的變數,把實參複製到新建形參的儲存區域中。採用複製傳遞方式傳遞資料,被呼叫函式不能訪問呼叫函式裡的實參。被呼叫函式處理的資料是複製到其形參的資料,因此,即使改變形參的值也不會影響實參的值,一旦被呼叫函式完成了其任務時,這些形參通常就釋放其佔用空間 。如下圖所示:

解釋:虛線箭頭是指將實參的資料拷貝給了形參變數,實參和形參是具有相同資料型別但儲存空間是不同的兩組空間。被呼叫函式處理的資料是複製到本地的資料,它不能改變改變呼叫函式中實參的值。

例題:任意輸入一段字串,程式執行完畢後即可分別輸出該段字串中所包括的大寫字母個數、小寫字母個數、數字個數、空格個數和其他字元個數。

#include <stdio.h>
int p[5]={};


int main()
{
    char str[300];
    int *C_count(char *m);
    printf("Please input the string:\n");
    gets(str);
    printf("Display the string:\n %s\n",str);
    C_count(str);
    printf("The caculated result is:\n");
    printf("Upper= %d Lower= %d Num= %d Space= %d Others= %d\n",p[0],p[1],p[2],p[3],p[4]);
    return 0;
}


int *C_count(char *m)
{


    while(*m!='\0')
    {
        if(*m>='A' && *m<='Z')
                    p[0]++;
        else if(*m>='a' && *m<='z')
                    p[1]++;
        else if(*m>='0' && *m<='9')
                    p[2]++;
        else  if(*m==' ')
                    p[3]++;
        else
                    p[4]++;
        m++;
    }
    return p;
    
}

執行結果如下:

[email protected]:~/yy$ ./1
Please input the string:
We are friends!!123
Display the string:
 We are friends!!123
The caculated result is:
Upper= 1 Lower= 11 Num= 3 Space= 2 Others= 2



2>地址傳遞方式

地址傳遞方式和複製傳遞方式正好相反,這種方式是將呼叫函式的引數本身傳給被呼叫函式。因此,被呼叫函式對形參的操作將直接誒改變實參的值。呼叫函式將實參的地址傳送給被呼叫函式,被呼叫函式將對該地址的目標操作,相當於對市場司本身的操作。按地址傳遞,實參為變數的地址,而形參為同類型的指標。

void Swap(double *x,double *y);//Swap函式宣告
int main()
{
double x1, x2;
x1=21.56;
x2=65.12;
Swap(&x1,&x2);//呼叫Swap函式,交換x1和x2的值
printf("x1=%.2f,x2=%.2f\n",x1,x2);
}
void Swap(double *x,*y)//實線x和y指向的目標
{
double temp;
temp = *x; *x = *y; *y = temp;
}
執行結果:
x1=65.12  x2=21.56


3>全域性變數

全域性變數就是在函式體外說明的變數,它們在程式中的每個函式裡都是可見的。實際上,全域性變數也是一種靜態型的變數。將它初始化為0.。全域性變數已經定義後就會在程式的任何地方可見。使用全域性變數傳遞資料的先後順序的不同會影響計算結果,應用順序不當將導致錯誤,這種方式儘量少用。

.