變數是程式可以操作的儲存區域的名稱。 Objective-C中的每個變數都有一個特定的型別,它決定了變數記憶體的大小和布局; 可儲存在記憶體中的值的範圍; 以及可以應用於變數的操作集。
變數的名稱可以由字母,數位和下劃線(_
)字元組成。 它必須以字母或下劃線開頭,它是區分大小寫的,即:大寫和小寫字母是不同的變數。 根據前一章解釋的基本型別,有以下幾種基本變數型別 -
編號 | 型別 | 描述 |
---|---|---|
1 | char |
通常它是一個八位(一個位元組),這是一個整數型別。 |
2 | int |
機器最自然的整數大小,一般是2位元組或4位元組 |
3 | float |
單精度浮點值。 |
4 | double |
雙精度浮點值。 |
5 | void |
表示不存在型別(什麼型別也不是) |
Objective-C程式設計語言還允許定義各種其他型別的變數,這些將在後續章節中介紹,其他型別如:列舉,指標,陣列,結構,聯合等。在本章中,只學習基本變數型別。
變數定義告訴編譯器為變數建立儲存的位置和數量。 變數定義指定資料型別,並包含該型別的一個或多個變數的列表,如下所示 -
type variable_list;
這裡,type
必須是有效的Objective-C資料型別,它包括:char
,w_char
,int
,float
,double
,bool
或任何使用者定義的物件等,variable_list
可以包含一個或多個用逗號分隔的識別符號名稱。下面顯示了一些有效的宣告 -
int i, j, k;
char c, ch;
float f, salary;
double d;
第一行:int i,j,k;
宣告並定義變數i
,j
和k
; 它指示編譯器建立名為i
,j
和k
的int
型別變數。
變數可以在宣告時初始化(分配初始值)。 初始化程式包含一個等號,後跟一個常數表示式,如下所示 -
type variable_name = value;
下面是變數宣告的一些例子 -
extern int d = 3, f = 5; // declaration of d and f.
int d = 3, f = 5; // definition and initializing d and f.
byte z = 22; // definition and initializes z.
char x = 'x'; // the variable x has the value 'x'.
對於沒有初始化變數的定義:具有靜態儲存持續時間的變數用NULL
隱式初始化(所有位元組的值都為0
); 所有其他變數的初始值未定義。
變數宣告為編譯器提供了保證,即存在一個具有給定型別和名稱的變數,以便編譯器繼續進行進一步編譯,而無需完整的變數詳細資訊。變數宣告僅在編譯時有意義,編譯器在連結程式時需要實際的變數宣告。
當使用多個檔案並在其中一個檔案中定義變數時,變數宣告很有用,這些檔案在連結程式時可用。 使用extern
關鍵字在任何地方宣告變數。 雖然可以在Objective-C程式中多次宣告變數,但它只能在檔案,函式或程式碼塊中定義一次。
範例
嘗試以下範例,變數已在頂部宣告,但它們在主函式內定義和初始化 -
#import <Foundation/Foundation.h>
// Variable declaration:
extern int a, b;
extern int c;
extern float f;
int main () {
/* variable definition: */
int a, b;
int c;
float f;
/* actual initialization */
a = 10;
b = 20;
c = a + b;
NSLog(@"value of c : %d \n", c);
f = 80.0/3.0;
NSLog(@"value of f : %f \n", f);
return 0;
}
編譯並執行上述程式碼時,它將產生以下結果 -
2018-11-14 01:44:55.382 main[141586] value of c : 30
2018-11-14 01:44:55.383 main[141586] value of f : 26.666666
同樣的概念適用於函式宣告,在宣告時提供函式名稱,並且可在其他任何位置給出其實際定義。 在下面的範例中,使用C函式進行了解釋,Objective-C也支援C樣式函式 -
// 函式宣告
int func();
int main() {
// 呼叫函式
int i = func();
}
// 函式定義
int func() {
return 99;
}
Objective-C中有兩種表示式 -
變數是左值,因此可能出現在賦值的左側。 數位文字是右值,因此無法分配,也不能出現在左側。 以下是有效的宣告 -
int g = 20;
但是以下不是有效的語句,會產生編譯時錯誤 -
10 = 20;