c語言 函式

2021-06-28 07:53:52 字數 2686 閱讀 8693

函式是實現某個功能的**段

函式之間的關係是並列的,不能巢狀

函式的定義

函式的返回值型別 函式名 (引數的型別 引數名1.... )

正常的函式有三部分:1. 函式的宣告 ; 2. 函式的定義; 3.函式的呼叫

如果函式在定義之前被呼叫的話,需要對函式提前進行宣告,當然在定義之後在呼叫如果沒有宣告也不會提示錯誤

函式的返回值型別 有兩種 有返回值和無返回值

所以函式的型別綜上有四種 1.無返回值無引數 2. 無返回值有引數 3. 有返回值無引數 4. 有返回值有引數

函式定義的時候要定義在main 函式的外面 函式的定義是並列的 不能進行巢狀

函式的宣告 函式的返回值型別 函式名(引數的型別 引數名1....);

函式的呼叫 函式名(引數1,引數2...);

函式執行的順序是從主函式開始 從上到下 從左到右

對於函式的呼叫 從主調函式開始 呼叫被調函式 然後返回到主調函式

當然 很多函式都寫在乙個檔案裡 不方便管理 這個時候可以寫到多個裡

在xcode中command + n 新建乙個cocoa touch class 這個時候會產生兩個檔案 .h檔案和.m檔案

.h 是標頭檔案 .m是函式的定義實現檔案

首先把函式的宣告寫到.h檔案中 然後把函式的實現寫在.m函式中 c語言中所有的函式都是從main主函式入口進行執行的

所以在mian函式那個檔案中進行呼叫函式, 在呼叫函式之前 ,要先#import "檔名.h";

然後再呼叫已經定義好的函式.

函式定義中的引數 叫形式引數, 在呼叫的時候函式中的引數叫實參即實際引數.

從實參到形參的傳值其實是乙個copy的過程, 也就是說 ,形參執行過後並不改變實參的值;

區域性變數和全域性變數 :定義在函式內部的變數 稱為區域性變數 作用域在函式內部 ; 全域性變數定義在函式內部的變數,稱為全域性變數,作用域在全域性都有用

變數的作用域 先找變數定義的位置   向前找 找到第乙個{}

若乙個函式呼叫自身,則成為函式的遞迴呼叫

注意函式的遞迴呼叫的時候,相當於把函式每層要執行的函式都展開,然後再返回到上層函式;

遞迴呼叫要有結束的條件,否則會陷入死迴圈;

正序輸出12345;//下面只寫實現函式

分析如下:12345

12345 / 10 = 1234 12345 % 10 = 5

1234 / 10 = 123 1234 % 10 = 4

123 / 10 = 12 123 % 10 = 3

12 / 10 = 1 12 % 10 = 2

1 / 10 = 0

所以對於這個遞迴的函式來說 這個函式的結束條件是定義的這個變數是 n   n / 10 == 0

所以函式實現如下:

void test (int n)

test(n / 10);

printf("%d", n % 10); }

在函式的呼叫終止函式的執行不能用break,而是用的時return;

對於上面那個函式,print("%d", n % 10); 是在所有的掉用函式都展開後, 然後返回時才輸出的,是正序的12345;

逆序的函式實現如下

void test1(int n)

printf("%d", n % 10);

test1(n / 10); }

這兩個例子在一起發現

test(n / 10);

printf("%d", n % 10); 的先後順序不同結果就是完全不同的

若printf("%d", n % 10); 在前面,

如test1中的 ,相當於把整個函式展開 ,一層層遞迴呼叫 若

test(n / 10);

printf("%d", n % 10);

則是在呼叫test(n / 10)之後一層一層(就是 test(12345) 執行時呼叫 test(1234) 然後呼叫test(123)然後呼叫test(12)然後呼叫test(1) 然後呼叫test(0)然後return)返回到被調函式之後才執行的 ,當n=0之後return之後 然後返回到函式test(1)

執行printf("%d", n % 10);此時輸出1,然後返回到test(12),此後執行printf("%d", n % 10);

輸出2這樣依次執行的.

void test(int n)

printf("hello!\n");

test(n - 1);

printf("%d ", n);}

如上面的例子輸出的結果就是5個hello和12345;可以很好的說明了程式的執行過程

執行過程如下:

void test(int n)

printf("hello!\n");

printf("hello!\n");

printf("hello!\n");

printf("hello!\n");

printf("hello!\n");

printf("hello!\n");

test(n - 1);

printf("%d ", n);

}printf("%d ", n);

}printf("%d ", n);

}printf("%d ", n);

}printf("%d ", n);

}printf("%d ", n);

}

C語言 函式

1 實參和形參在數量上,型別上,順序上應嚴格一致,否則會發生 型別不匹配 錯誤。2 實參可以是常量,變數,表示式甚至是函式。但是在傳遞給函式前,必須有確定的值。3 形參變數只有在被呼叫時才分配記憶體單元,只有在函式內部有效,函式結束後不能再使用。4 實參和形參佔據不同的儲存單元。5 函式預設採用值傳...

C語言函式

和變數 控制流 條件一樣 函式也是現代程式語言的基本組成部分。他可以使我們在應用中重複利用一塊 對於 的組織和維護是很有必要的。您將在ios和os x的框架中發現大量的例子。像其他的基礎元素一樣,object c的函式也是建立在c語言函式之上的。這章我們將介紹c語言最重要的方面,包括基本語法 宣告和...

C語言函式

1.宣告函式 include 函式 void printhelloworld 帶傳入引數 void hello char name 多個傳入引數 void hi char name,int age 帶返回值的函式 int add int a,int b int main 2 main 函式引數及返回...