糯米文學吧

位置:首頁 > 計算機 > C語言

淺談C語言函數

C語言2.36W

導語: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語言的關鍵。

標籤:淺談 函數 語言