Linux——網絡卡知識
函式
函式的原型和呼叫
在使用函式前必須定義或者宣告函式
double circle(double r);
int main(){
double length = circle(10);
printf("length = %f\n", length);
return 0;
}
double circle(double r)
{
return 2 * 3.14 * r;
}
函式的形參與實參
在呼叫函式的時候,函式大多數都有引數,主調函式和被呼叫函式之間需要傳遞資料。
在定義函式時函式名後面括弧中的變數名稱為“形式引數”,簡稱形參。在呼叫函式時,函式名後面括號中的變數或表示式稱為“實際引數”,簡稱實參。
1形參在未出現函式呼叫時,他們並不佔用記憶體單元,只有在發生函式呼叫的時候形參才被分配記憶體,函式呼叫完成後,形參所佔的記憶體被釋放
2實參可以是變數,常量或者表示式
3在定義函式時,一定要指定形參的資料型別
4形參與實參的資料型別一定要可相容
5在C語言中,實參與形參的資料傳遞是“值傳遞”,即單向傳遞,只由實參傳遞給形參,而不能由形參傳遞給實參。
如果函式的引數是個陣列,那麼是可以通過形參修改實參的值的
函式的返回型別與返回值
1函式的返回值通過函式中的return獲得,如果函式的返回值為void可以不需要return語句。
2函式return語句中的返回值資料型別應該與函式定義時相同。
3如果函式中沒有return語句,那麼函式將返回一個不確定的值。
main函式與exit函式與函式的return語句
int test1(){ printf("111111\n"); //return 0; exit(0);//在子函式中呼叫exit同樣代表程式終止,但在子函式中呼叫return只是子函式終止,程式正常執行 printf("222222\n"); } int main(){ test1(); printf("AAAAAA\n"); exit(100);//exit是C語言的庫函式,呼叫exit的結果就是程式終止 return 100;//在main函式中呼叫exit與呼叫return是一樣的 printf("CCCCCCC\n"); return 0;//main函式return代表程式終止 printf("BBBBBB\n"); }
多個原始碼檔案程式的編譯
標頭檔案的使用
如果把main函式放在第一個檔案中,而把自定義函式放在第二個檔案中,那麼就需要在第一個檔案中宣告函式原型。
如果把函式原型包含在一個頭檔案裡,那麼就不必每次使用函式的時候都宣告其原型了。把函式宣告放入標頭檔案是很好的習慣。
#include與#define的意義
#include就是簡單的檔案內容替換
#define就是簡單的文字替換而已
#ifndef與#endif
#ifndef的意思就是條件預編譯,如果#ifndef 後面的條件成立,那麼就預編譯從#ifndef開始到#endif之間的程式碼,否則不會去預編譯這段程式碼
函式的遞迴
函式可以呼叫自己,這就叫函式的遞迴
void recurse(int i){
if (i > 0) {
recurse(i - 1);
}
printf("i = %d\n", i);
}
int main(){
recurse(10);
return 0;
}
遞迴的過程分析
void up_down(int n){
printf("in %d, location %p\n", n, &n);
if (n < 4)
up_down((n + 1));
printf("out %d, location %p\n", n, &n);
}
int main(){
up_down(1);
return 0;
}
![img](file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml9124\wps1.jpg)
![img](file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml9124\wps2.jpg)
![img](file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml9124\wps3.jpg)
有n個人排成一隊,問第n個人多少歲,他回答比前面一個人大2歲,再問前面一個人多少歲,他回答比前面一個人大2歲,一直問到最後問第一個人,他回答10歲
int age(int n)
{
int i;
if (n == 1)
i = 10;
else
i = age(n - 1) + 2;
return i;
}
將10進位制數轉化為二進位制數的例子
234在十進位制下為2 * 10的2次方 + 3 * 10的1次方 + 4*10的0次方。
奇數的二進位制最後一位一定是1,偶數的二進位制最後一位一定是0。
可以通過 number % 2 得到二進位制形式的最後一位,如果要將一個完整的整數轉化為二進位制就需要用到遞迴函式。
在遞迴呼叫之前,計算 number % 2的值,然後在遞迴呼叫語句之後進行輸出,這樣計算出的第一個數值反而在最後一個輸出。
為了得出下一個數,需要把原數除以2,這種計算相當於十進位制下把小數點左移一位,如果此時得出的數是偶數,,則下一個二進位制的數值是0,如果得出的是奇數,那麼下一個二進位制數為1。
直到被2除的結果小於2,就停止遞迴。
void to_binary(unsigned int n)
{
unsigned int i = n % 2;
if (n >= 2)
to_binary(n / 2);
printf("%c", i + 0x30);
}
斐波那契數列例子
斐波那契數列指的是這樣一個數列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...
第0項是0,第1項是第一個1。
這個數列從第2項開始,每一項都等於前兩項之和。
int fib(int n)
{
if (n == 0)
return 0;
if (n == 1)
return 1;
if (n > 1)
return fib(n - 1) + fib(n - 2);
}
遞迴的優點
遞迴給某些程式設計問題提供了最簡單的方法
遞迴的缺點
一個有缺陷的遞迴會很快耗盡計算機的資源,遞迴的程式難以理解和維護。