搜索
熱搜: 活動 交友 discuz
查看: 2087|回復: 0
打印 上一主題 下一主題

[教學] C 函數說明

[複製鏈接]
跳轉到指定樓層
1#
發表於 2007-9-4 08:58:58 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
?1.
C語言使用的函數可以寫出非常漂亮的程式結構,使程式簡單化,偵錯容易。
2.
將重複之某些指令撰寫成一個函數,可減少編輯程式時間,更可使程式精簡,清晰了解。
3.
C語言使用的函數其呼叫方法與數學上使用函數完全相同,
例 如 :

a = function ( x , y ) ;

表示將變數 x , y 輸入函數 function , 其傳回函數值設定給變數 a 。

l
(格式)1.
(Function Definition)
2.
(Function Call)
3.
(Function Prototype)

l
(格式)

儲存類別 資料型別 函數名稱 (形式引數的串列)
{

形式引數的宣告 ;

函數的本體(執行敘述)
}

Example:



void Line (void)

{
int j;

for (j=1;j<20;j++)
printf(“%d\n”,j);

}
l
 函



儲存類別

功能敘述

static

只能在進行宣告的編譯單位內可以執行

extern

在進行宣告的編譯單位以外也可執行

ps. 一 般 函 數 的 儲 存 類 別 可 以 省 略 , 此 時 當 作 "extern" 處 理 。

Example1: file1.c

extern
func1( )
{
.
.
}
static func2( )
{
.
}
Example2: file2.c
extern func1( );

static
func3( )
{
.
.
func1( );.
}
l

要 求 函 數 送 回 傳 回 值 (函數值) , 必 須 在 函 數 本 體 中 利 用 return 敘 述 進 行 , 例 如 :

return ( 變數或式子 ) ;

(函數值)



return()敘述之目的如下


1.
將控制權傳回給呼叫程式2.
將return()敘述後括號內之數值傳給呼叫程式之方式l
( 1 ) 傳 遞 變 數 值 本 身 ( Call by value )
( 2 ) 傳 遞 變 數 的 位 址 ( Call by reference )



Example 1: 傳值呼叫
#include < stdio.h >

int func(a,b,c)

int a,b,c;

{

int d;

d=a+b+c;

return(d);

}
void main(void)
{

int x,y,z,p;

x=y=z=3;

p=func(x,y,z);

printf("p-->%d\n",p);

}

result :
p-->9


Example 2: 傳址呼叫
#include < stdio.h > void func(a,b,c,d)int *a,*b,*c,*d;{
*d=*a+*b+*c;
} void main(void){
int x,y,z,p;
x=y=z=3; func(&x,&y,&z,&p);
printf("p-->%d\n",p);
}

result :
p-->9
/* ================================================== *//*
程式實例:傅值和傳址的副程序呼叫(交換XY)
*/
/* ================================================== */ /* --------------------交換兩值(傳值副程序)-------------------- */void swap1(int x,int y){
int temp;

temp = x;

x = y;

y = temp;
} /* -------------------
交換兩值(傳址副程序) ----------------- */
void swap2(int *x,int *y){
int temp;

temp = *x;

*x = *y;

*y = temp;
} /* ---------------------主程式---------------------- */void main(){
int x = 10, y=0;
/* 局部變數宣告 */

printf("
X
Y
\n");

printf("
初值
%d
%d
\n",x,y);

swap1(x,y);

/* 傳值副程序呼叫(交換XY) */

printf("
傳值
%d
%d
\n",x,y);

swap2(&x,&y);

/* 傳址副程序呼叫(交換XY) */

printf("
傳址
%d
%d
\n",x,y);
}
Result X Y
初值 10 0
傳值 10 0
傳址 0 10

您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則

本論壇為非營利之網路平台,所有文章內容均為網友自行發表,不代表論壇立場!若涉及侵權、違法等情事,請告知版主處理。


Page Rank Check

廣告刊登  |   交換連結  |   贊助我們  |   服務條款  |   免責聲明  |   客服中心  |   中央分站

手機版|中央論壇

GMT+8, 2024-5-2 13:53 , Processed in 0.017923 second(s), 16 queries .

Powered by Discuz!

© 2005-2015 Copyrights. Set by YIDAS

快速回復 返回頂部 返回列表