第七章 函數
第一節 函數的基本概念和定義
1. 函數的基本概念
-
a) 一個文件裏有有一個或多個函數組成,這個文件我們一般成爲源程序
-
b) 大項目源程序不能都放一個文件裏,所以一個c項目是由一個或多個源程序組成,這些函數可以分別放到這些源程序文件裏並被所有的源程序文件共用
-
c) C程序從main函數開始執行,最終也是在main函數中結束整個程序的運行
-
d) 函數裏不能套函數,但是函數之間可以互相調用,不要手工去調用main函數,這個是留給系統調用的
函數的分類
- a) 庫函數:比如printf,直接使用,不要我們自己定義, strcpy …
- b) 自定義函數:是我們自己定義的函數,用於滿足自己的需求
2. 函數的定義和函數返回值
函數的參數:調用函數的時候,需要把一些數據傳遞給函數,該函數就需要用一些變量常來接受這些數據,這些函數接收數據的變量,就叫參數
函數的一般形式: 返回類型 函數名(形式參數列表) //記住這個概念,函數裏邊的參數叫形式參數,形參
返回類新 函數名(形式參數列表){
......
語句
return 返回值
}
- 無返回類型的函數,無形參 void printhello(){…},無返回類型的函數,返回類型必須寫成void
- 有參數,有返回值
#include <iostream>
// 函數的定義,也相當與聲明瞭
// 自己定義的函數
void printhello() {
printf("Hi, welcome to Felaim's blog!\n");
}
// a,b就叫做形式參數,形式參數的目的表示有數據要傳遞到本函數來,用這些參數來接受這些傳遞過來的值
int sum_2(int a, int b) {
return (a + b);//用return返回值給調用者,一般調用者會用賦值語句來接收該值
}
int maxfunc(int a, int b) {
return a > b ? a : b;
}
int main() {
std::cout << "Hello, World!" << std::endl;//調用一個函數之前必須先聲明
printhello();
int sum;
sum = sum_2(3, 5);//3, 5叫實際參數,簡稱實參
printf("function sum2 result: %d\n", sum);
int max = maxfunc(13, 5);
printf("function maxfunc result: %d\n", max);
return 0;
}
-
函數定義的第一行沒有分號’;’
-
形式參數在函數調用之前並不分配內存,調用的時候分配內存,函數調用結束後,形式參數的內存就被釋放了,所以形式參數只能再函數內部使用
-
實參可以是常量\變量\表達式
-
函數調用的時候,實參的值自動付給來形參,如果實際參數和形式參數爲數組名(數組名代表的是數組首地址),則傳遞進去的是數組首地址而不是變量值
-
形參數量和類型與實參的數量和類型保持一致
-
c語言規定,實參變量對形參變量的數據傳遞是"值傳遞",也就是單項傳遞,只由實參傳遞給形參,不能由形參傳遞給實參
-
如果你實際返回的類型和函數定義的類型不同時,系統會自動轉成函數返回類型值