1. 程式人生 > 其它 >OC學習2——C語言特性之函式

OC學習2——C語言特性之函式

1、OC是在C語言的基礎上進行擴充套件的,在OC中直接用C語言進行coding也是可以通過編譯的。因此,函式定義的語法格式如下:

函式返回值型別  函式名(形參列表)
{
   //由零條或多條可執行性語句組成的函式提         
}

2、函式的傳遞機制:值傳遞、地址傳遞。

值傳遞:將實際的引數值的副本(複製品)傳入函式內,引數本身不受函式內對其副本的改變的影響。

地址傳遞:將實際引數的地址的副本傳入函式,函式中對地址對應位置的值進行改變會影響到實際引數的值。

3、內部函式和外部函式:

內部函式:定義函式時用static修飾,該函式只能被當前原始檔中的其他函式進行呼叫,這種函式稱為內部函式。內部函式具有更好的內聚性,它可以保證該函式只能在該原始檔中被呼叫,從而可以避免多個原始檔中重名函式的衝突問題。

外部函式:定義函式時使用extern修飾,或者不使用任何修飾符修飾,它可以被任何檔案中的函式呼叫,這種函式稱為外部函式。一般用於庫函式的定義中。

4、區域性變數與全域性變數:

 區域性變數:分為函式區域性變數和程式碼塊區域性變數。C語言並不強制對區域性變數賦初始值,在程式設計師對區域性變數賦初始值之前,區域性變數的值是不確定的,這是因為每次呼叫函式的時候都會為該變數重新分配記憶體,而重新分配的記憶體中的值是不確定的。

全域性變數:也稱為外部變數,該原始檔中的所有函式都可以使用全域性變數。如果區域性變數和全域性變數同名,則區域性變數會覆蓋全域性變數。全域性變數又分為外部全域性變數(所有原始檔的函式都可以訪問的變數,用extern關鍵字宣告或者不宣告)和內部全域性變數(當前原始檔中的所有函式都可以訪問的變數,用static關鍵字宣告)。

5、C語言程式執行的記憶體大致可以分為三個部分:程式區、靜態儲存區、動態儲存區。

靜態儲存區:靜態儲存區的變數在程式執行開始時分配記憶體,直到程式結束才會釋放記憶體,在程式執行過程中,靜態儲存區的變數總是佔據固定的記憶體,靜態儲存區總是存放兩類變數:全域性變數、static修飾的區域性變數。

動態儲存區:動態儲存區的變數所在的儲存空間是動態分配的,當程式多次呼叫同一個函式時,該函式的區域性變數(非static修飾的變數)每次都會動態分配記憶體空間,每次函式結束都會自動釋放這些記憶體空間,這種分配和釋放都是動態的。動態儲存區主要存放三類資料:函式的形參、非static區域性變數、函式執行的現場資料以及返回地址等。

6、C語言中變數的儲存類別:

auto:自動儲存幾隻,區域性變數預設採取這種儲存機制

static:指定將區域性變數存放在靜態儲存區,這樣該變數所佔的空間愛你的一直儲存直到程式退出。

register:指定將該變數存放到暫存器中。

extern:定義外部區域性變數。

 1 #import <Foundation/Foundation.h>
 2 
 3 //瞭解auto和static的區別
 4 void fac(int n)
 5 {
 6     auto int a = 1 ;
 7     static int b = 1 ;
 8     a+= n ;
 9     b+= n ;
10     printf("a = %d, b = %d",a, b) ;       
11 }
12 
13 int main(int argc, char * argv[])
14 {
15     //才用迴圈呼叫三次
16     for(int i = 0 ; i < 3 ; i++)
17     {
18         fac(i) ;
19     }
20 }
21 
22 /*  輸出結果為
23    a = 1, b = 1
24    a = 2, b = 2
25    a = 3, b = 4
26 */  

 7、預處理是C、OC的特殊命令。在編譯器對程式進行編譯之前,編譯器會對這些預處理進行處理,然後將這些預處理的結果與源程式一起進行編譯。

預處理的兩個特徵:1、預處理命令都必須以#開頭;2、預處理通常都位於程式開頭部分。

 1 //使用#define執行巨集定義,#undef取消巨集定義
 2 #define YES 1
 3 #define PI 3.1415926
 4 
 5 #undef YES
 6 
 7 //帶參巨集定義
 8 #define AREA(r) PI*r*r
 9 
10 // C語言使用#include匯入其他源程式
11 // OC語言使用#import匯入其他源程式
12 
13 //使用#ifdef、#ifndef、#else、#endif執行條件編譯
14 #ifdef 巨集名稱
15     //語句
16 #else
17     //語句
18 #endif
19 
20 //使用#if、#elif、#else、#endif 執行條件編譯
21 #if 表示式
22     //語句
23 #elif 表示式
24     //語句
25     //可以有多個#elif語句
26 #else
27     //語句
28 #endif