若是沒有回傳值的函數,可將該函數宣告為 void ,同樣的,沒有參數的函數,於參數列也需宣告為 void 。例如以下函數印出新行
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | #include <stdio.h> void newline( void ); int main( void ) { newline(); newline(); newline(); printf ( "上面會印出三個新行符號\n" ); return 0; } void newline( void ) { printf ( "\n" ); } /* 《程式語言教學誌》的範例程式 檔名:newline.c 功能:示範沒有回傳值的函數 作者:張凱慶 時間:西元2010年4月 */ |
編譯後執行,如下
若是參數或回傳值的型態都為基本資料型態,如整數、浮點數或字元,由於 C 語言採用傳值呼叫,因此函數間傳遞任何數值都是先拷貝一份再傳遞,整數、浮點數或字元所佔記憶體的空間固定且較小,對程式的效率比較沒有影響。如
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #include <stdio.h> int max( int , int ); int main( void ) { printf ( "%d為較大值\n" , max(22, 55)); return 0; } int max( int a, int b) { return a > b ? a : b; } /* 《程式語言:教學誌》的範例程式 檔名:maxint.c 功能:示範回傳較大值的函數 作者:張凱慶 時間:西元2010年4月 */ |
編譯後執行,如下
經常使用的字串,常以字元指標的方式當作參數,如下例函數 lenTest 接受字元指標當作參數,然回傳字串長度的整數值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | #include <stdio.h> int lenTest( char *); int main( void ) { char *saying = "Easier said than done." ; printf ( "這句英文諺語 \"%s\" 有%d個字母...\n" , saying, lenTest(saying)); return 0; } int lenTest( char *word) { int i = 0; while (word[i] != '\0' ) { i++; } return i; } /* 《程式語言教學誌》的範例程式 檔名:lenTest.c 功能:示範計算字串長度的函數 作者:張凱慶 時間:西元2010年4月 */ |
編譯後執行,如下
傳遞陣列亦如上例,字串也就是字元陣列,陣列名稱就是指向第 1 個元素的指標。至於要在函數間傳遞結構的話,由於 C 語言是利用傳值呼叫,因此會拷貝整個結構的副本進行傳遞,這樣一來有損效率,因此通常只會傳遞結構的成員,而非整個結構。
如果函數需要修改兩個以上的參數並且回傳,由於 C 語言只能回傳單一個值,這時候可以利用指標,例如以下函數將兩個變數的值互換
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | #include <stdio.h> void swap( int *, int *); int main( void ) { int a = 22; int b = 11; printf ( "兩數交換以前.. a = %d, b = %d\n" , a, b); swap(&a, &b); printf ( "兩數交換以後.. a = %d, b = %d\n" , a, b); return 0; } void swap( int *aPtr, int *bPtr) { int temp; temp = *aPtr; *aPtr = *bPtr; *bPtr = temp; } /* 《程式語言教學誌》的範例程式 檔名:swap.c 功能:示範利用指標修改兩個參數 作者:張凱慶 時間:西元2010年4月 */ |
編譯後執行,如下
沒有留言:
張貼留言