變數是程式可以操作的存儲區域的名稱。 Objective-C中的每個變數都有一個特定的類型,它決定了變數記憶體的大小和佈局; 可存儲在內存中的值的範圍; 以及可以應用於變數的操作集。
變數的名稱可以由字母,數字和下劃線(_
)字元組成。 它必須以字母或下劃線開頭,它是區分大小寫的,即:大寫和小寫字母是不同的變數。 根據前一章解釋的基本類型,有以下幾種基本變數類型 -
編號 | 類型 | 描述 |
---|---|---|
1 | char |
通常它是一個八位(一個位元組),這是一個整數類型。 |
2 | int |
機器最自然的整數大小,一般是2位元組或4位元組 |
3 | float |
單精確度浮點值。 |
4 | double |
雙精度浮點值。 |
5 | void |
表示不存在類型(什麼類型也不是) |
Objective-C編程語言還允許定義各種其他類型的變數,這些將在後續章節仲介紹,其他類型如:枚舉,指針,數組,結構,聯合等。在本章中,只學習基本變數類型。
1. 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
); 所有其他變數的初始值未定義。
2. Objective-C變數聲明
變數聲明為編譯器提供了保證,即存在一個具有給定類型和名稱的變數,以便編譯器繼續進行進一步編譯,而無需完整的變數詳細資訊。變數聲明僅在編譯時有意義,編譯器在鏈接程式時需要實際的變數聲明。
當使用多個檔並在其中一個檔中定義變數時,變數聲明很有用,這些檔在鏈接程式時可用。 使用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;
}
3. Objective-C的左值和右值
Objective-C中有兩種運算式 -
- 左值 - 引用記憶體位置的運算式稱為“左值”運算式。左值可以顯示為賦值的左側或右側。
- 右值 - 術語右值是指存儲在內存中某個地址的數據值。右值是一個不能賦值給它的運算式,這意味著右值可能出現在賦值的右邊但不是左邊。
變數是左值,因此可能出現在賦值的左側。 數字文字是右值,因此無法分配,也不能出現在左側。 以下是有效的聲明 -
int g = 20;
但是以下不是有效的語句,會產生編譯時錯誤 -
10 = 20;