Objective-C變數


變數是程式可以操作的儲存區域的名稱。 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資料型別,它包括:charw_charintfloatdoublebool或任何使用者定義的物件等,variable_list可以包含一個或多個用逗號分隔的識別符號名稱。下面顯示了一些有效的宣告 -

int    i, j, k;
char   c, ch;
float  f, salary;
double d;

第一行:int i,j,k;宣告並定義變數ijk; 它指示編譯器建立名為ijkint型別變數。

變數可以在宣告時初始化(分配初始值)。 初始化程式包含一個等號,後跟一個常數表示式,如下所示 -

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;