C函數
在C程序中至少有一個函數,即主函數main()
。
函數聲明告訴編譯器函數的名稱、返回類型和參數。函數定義提供了函數的實際主體。
定義函數
在C語言中,函數由函數頭和函數體組成。主要是返回類型、函數名稱、參數、函數主體幾部分。
template:
return_type function_name( parameter list ) {
body of the function
}
example:
int add(int num1, int num2) {
return num1 + num2;
}
聲明函數
template:
return_type function_name( parameter list );
example:
//帶參數名
int add(int num1, int num2);
//不帶參數名
int add(int, int);
調用函數
#include <stdio.h>
int add(int, int);
int main(int argc, const char * argv[]) {
int sum;
sum = add(10, 20);
printf("sum=%d\n", sum);
return 0;
}
int add(int num1, num2) {
return num1 + num2;
}
函數參數
- 傳值調用,即將參數的實際值複製給函數的形式參數。這種情況下,修改函數內的形參不會改變實參。
#include <stdio.h>
void exchange(int, int);
int main(int argc, const char * argv[]) {
int a = 10, b = 20;
printf("交換前,a 的值: %d\n", a );
printf("交換前,b 的值: %d\n", b );
exchange(a, b);
printf("交換後,a 的值: %d\n", a );
printf("交換後,b 的值: %d\n", b );
return 0;
}
void exchange(int x, int y) {
int temp = x;
x = y;
y = temp;
return;
}
- 指針調用,即形式參數爲指向參數實際值的指針,當對形參操作時,對當於對實參本身進行操作。
#include <stdio.h>
void exchange(int *x, int *y);
int main(int argc, const char * argv[]) {
int a = 10, b = 20;
printf("交換前,a 的值: %d\n", a );
printf("交換前,b 的值: %d\n", b );
exchange(&a, &b);
printf("交換後,a 的值: %d\n", a );
printf("交換後,b 的值: %d\n", b );
return 0;
}
void exchange(int *x, int *y) {
int temp = *x;
*x = *y;
*y = temp;
return;
}
內部函數
定義函數時,在函數名和函數類型的前面加static
, 則此函數是內部函數,又稱作靜態函數,只能在本文件中調用。
static int max(int a,int b);
外部函數
定義函數時,在函數的首部的最左端加關鍵字 extern
,則此函數是外部函數,可供其它文件調用。
C語言規定,如果在定義函數時省略 extern,則默認爲外部函數
extern int max(int a, int b);
關於Main函數的參數
對於main()函數,你有可能會看到int main( int argc, char *argv[] )
,也有可能看到int main()
,那麼main函數到底有沒有參數?
- main 函數其實與我們寫的函數沒有什麼區別,它也會有自己的參數。argc 和 argv 是 main 函數的形式參數。
- 如果main函數要帶參數,就是argc 和 argv這兩個參數,否則main函數沒有參數。
- main函數參數是通過命令行字符串傳遞的。