當前位置:才華齋>計算機>C語言>

淺談C語言函式

C語言 閱讀(2.4W)

導語:C語言程式設計是結構化程式設計,函式是C語言的基本模組,函式呼叫是C語言執行的重要機制,在C語言中除了提供大量的庫函式外,要實現具體的功能必須自己定義函式,下面就由小編為大家淺談一下C語言函式,歡迎大家閱讀!

淺談C語言函式

  1 函式的定義

所謂函式定義,即定義函式功能,如求和,求最值,排序功能,用C語言提供的選擇結構、迴圈結構寫出具體的程式碼實現。如果函式只是完成某項特定的處理任務可以定義無返回值的函式,如果函式最後要返回結果,可以定義的返回值的函式,如下兩段程式碼左邊有返回值,右邊沒有返回值。

int sum1(int m)//函式頭部

{ int i,sum=0;

for(i=1;i<=m;i++)

sum=sum+i;

return sum; }

void sum2(int m)//函式頭部

{ int i,sum=0;

for(i=1;i<=m;i++)

sum=sum+i;

}

s=sum;

}

  2 函式的呼叫

函式呼叫的一般形式為:

函式名(實參列表);

實參可以是常數、變數、表示式等,多個實參用逗號,分隔。

在C語言中,函式呼叫的方式有多種,例如:

01.// 函式作為表示式中的一項出現在表示式中

02.z = max(x, y);

03.m = n + max(x, y);

04.// 函式作為一個單獨的語句

tf("%d", a);

f("%d", &b);

07.// 函式作為呼叫另一個函式時的實參

tf( "%d", max(x, y) );

l( max(x, y), min(m, n) );

在函式呼叫中還應該注意的一個問題是求值順序的問題。所謂求值順序是指對實參列表中各個引數是自左向右使用呢,還是自右向左使用。對此,各系統的規定不一定相同。

  3 實際引數和形式引數

在函式定義時出現函式名後邊括號裡的變數就是形參,形參必須是變數,因為在函式呼叫時形參是被賦值物件,形參只在定義它的函式內部被訪問,是區域性變數。

在函式呼叫時出現在函式名後邊括號裡的常量、變數、表示式、函式等是實參,實參當前值是確定的,因為它在賦號右側。

實參出現在主調函式中,形參出現在被調函式中。

  4 傳值呼叫和傳址呼叫

4.1兩個數對調的函式實現

#include

int a=3,b=4;

void swap1(int a,int b){//值傳遞,也稱為單向傳遞

int t;

t=a;a=b;b=t;

}

void swap2(int *a,int *b){//地址傳遞,也稱為“雙向傳遞”,實質還是單向傳遞

int t;

t=*a;*a=*b;*b=t;

}

main(){

swap1(a,b);

printf("a=%d,b=%d",a,b);

swap2(&a,&b);

printf("a=%d,b=%d",a,b);

}

第一個輸出結果為3,4,第二個輸出結果為4,3,在這裡傳值呼叫和傳址呼叫正確,多數教材和資料中談到傳址呼叫時介紹是雙向傳遞,應該是不正確的,以下面例子為例:

4.2有下列程式

# include

void fun1(int x,int y)

{ int z;

z=x; x=y; y=z;

}

void fun2(int *x,int *y)

{ int z;

z=*x; *x=*y; *y=z;

(*x)++; (*y)++;

}

void fun3(int *x,int *y)

{ int z;

z=*x; *x=*y; *y=z;

(*x)++; (*y)++;

}

void main()

{ int a=5,b=9;

fun1(a,b);

printf("a=%d,b=%d",a,b);

fun2(&a,&b);

printf("a=%d,b=%d",a,b);

fun3(&a,&b);   printf("a=%d,b=%d",a,b);

}

在這個程式中有三次函式呼叫,第一次呼叫結果還第三次呼叫都沒有改變主調函式中變數的值第二次改變了,第一次是傳值呼叫,第二、三次是傳址呼叫,第二次改變的實質不是因為是傳址呼叫,而是因為使用了間接訪問。

  5 C語言程式設計函式使用方法

5.1函式是C模組語言的模組

C語言的基本框架是函式,函式是C語言的基本模組,在理解中列舉生活中的例子,例如一個部門一開始很小,只有一個人,相當只有一個主函式,慢慢的部門壯大起來,需要的人數增多,這時候部門就可以再進一個人,那必然有一個領導另一個,領導者就是先來的人,也就是主函式,被領導者是後來的人,即被呼叫函式,主函式安排任務給被調函式,要把任務內容告訴被呼叫函式,這變是引數傳遞。

5.2函式程式碼定義過程

定義時先定義被呼叫函式,然後再定義主函式,這樣在主函式中就不用做函式聲明瞭。

定義被呼叫函式時,先把函式名字及圓括號和大括號寫,裡面的`程式碼先不寫。然後寫主函式定義,主函式在這裡沒有返回值也無參,主函式的頭部定義沒有問題,然後先寫主函式體程式碼,通常主函式分三部分, 輸入、呼叫和輸出,這三部分相對比較難的是呼叫,呼叫時要分析有沒有返回值,有沒有引數,如果有引數,有幾個並且引數的型別要確定,呼叫時的引數是實際引數,根據實參和形參的一一對應關係,實參確定好了,形參的型別和個數自然也就確定了,這樣被呼叫函式的頭部就定義好了。

主函式定義後,被呼叫函式的頭部也定義好了,這時候開始寫被呼叫函式的函式體,也是編寫程式最難的一部分,涉及具體的演算法。

把主函式和被呼叫函式定義好後,在具體開發環境下編譯、連結、執行,找出程式有沒有語法錯誤和邏輯錯誤,最後程式得出正確的結果。

  6 結語

C語言程式設計函式部分是學習難點,它把以前學的一個函式能實現的功能分在兩個或多個函式中實現,並且多個函式這間有介面,介面就是函式呼叫時的引數傳遞,引數傳遞時又涉及到變數的作用域和生存期,函式部分把C語言的各個知識點都聯接起來了,是C語言的整合和綜合,所以學好函式是學好C語言的關鍵。