變量是只不過(guò)是一個(gè)名字到存儲(chǔ)區(qū)域,讓程序可以操縱。 Objective-C中的每一個(gè)變量有特定的類(lèi)型,確定該變量的存儲(chǔ)器的大小和布局,可以存儲(chǔ)在該存儲(chǔ)器內(nèi)的值的范圍內(nèi);和設(shè)定操作,可變化應(yīng)用。
一個(gè)變量名可以由字母,數(shù)字和下劃線。它必須以字母或下劃線開(kāi)始。大寫(xiě)和小寫(xiě)字母是不同的,因?yàn)镺bjective-C語(yǔ)言是區(qū)分大小寫(xiě)的。前面的章節(jié)中介紹的基本類(lèi)型的基礎(chǔ)上,有以下基本變量類(lèi)型:
類(lèi)型 | 描述 |
---|---|
char | 通常一個(gè)單字節(jié)(一個(gè)字節(jié))。這是一個(gè)整數(shù)類(lèi)型. |
int | 機(jī)器的自然整數(shù)大小. |
float | 單精度浮點(diǎn)值. |
double | 雙精度浮點(diǎn)值. |
void | 表示類(lèi)型沒(méi)有(空). |
Objective-C的編程語(yǔ)言還可以定義各種其他類(lèi)型的變量,我們將在隨后的章節(jié),如枚舉,指針,數(shù)組,結(jié)構(gòu),聯(lián)合,對(duì)于本章,我們只學(xué)習(xí)基本的變量類(lèi)型。
定義一個(gè)變量意味著告訴編譯器在哪里以及如何創(chuàng)建存儲(chǔ)變量。一個(gè)變量的定義指定了數(shù)據(jù)類(lèi)型,并包含一個(gè)列表中的一個(gè)或多個(gè)變量的那類(lèi)型,如下所示:
type variable_list;
在這里,type 必須是一個(gè)有效的Objective-C 數(shù)據(jù)類(lèi)型,包括char,w_char, int, float, double, bool或任何用戶定義的對(duì)象等,并variable_list 可能包含一個(gè)或多個(gè)以逗號(hào)分隔的標(biāo)識(shí)符名稱。一些有效的聲明如下所示:
int i, j, k; char c, ch; float f, salary; double d;
行中 int i, j, k;;聲明和定義變量i,j和k指示編譯器來(lái)創(chuàng)建命名的變量類(lèi)型為int i,j和k的。
變量可以在他們的聲明中初始化(分配一個(gè)初始值)。初始化由等號(hào)后面的常量表達(dá)式如下:
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'.
對(duì)于沒(méi)有初始化的定義:具有靜態(tài)存儲(chǔ)持續(xù)時(shí)間的變量隱式初始化NULL(所有字節(jié)值0);所有其他變量的初始值是不確定的。
變量聲明提供編譯器,保證有一個(gè)具有給定類(lèi)型和名稱的變量,無(wú)需完整的細(xì)節(jié)進(jìn)行進(jìn)一步編譯,這樣編譯器存在的變量。變量聲明有其意義,編譯器在編譯的時(shí)候只需要在鏈接程序的時(shí)候,實(shí)際的變量聲明。
當(dāng)您使用多個(gè)文件和你的文件,這將是在鏈接程序的時(shí)候定義的變量,變量聲明是有用的。在任何地方,將使用extern關(guān)鍵字來(lái)聲明一個(gè)變量。雖然你可以在你的Objective-C程序中聲明一個(gè)變量多次,但它可以在文件中,一個(gè)函數(shù)或代碼塊中只定義一次。
試試下面的例子中,變量已被定義在頂部,但他們已經(jīng)定義并初始化里面的主要功能:
#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 ", c); f = 70.0/3.0; NSLog(@"value of f : %f ", f); return 0; }
上面的代碼編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生以下結(jié)果:
2013-09-07 22:43:31.695 demo[14019] value of c : 30 2013-09-07 22:43:31.695 demo[14019] value of f : 23.333334
同樣的概念適用于函數(shù)聲明提供在其聲明的時(shí)候,它的實(shí)際定義一個(gè)函數(shù)名可以給其他地方。在下面的例子,它使用C函數(shù),正如所知道的 Objective-C支持C風(fēng)格的函數(shù)也解釋:
// function declaration int func(); int main() { // function call int i = func(); } // function definition int func() { return 0; }
Objective-C中有兩種類(lèi)型的表達(dá)式:
lvalue : 該表達(dá)式是一個(gè)左值,可能會(huì)出現(xiàn)一個(gè)賦值為左邊或右邊。
rvalue : 這是一個(gè)右值表達(dá)式可能會(huì)出現(xiàn)在右側(cè)而不是左側(cè)的任務(wù)。
變量是左值,可能會(huì)出現(xiàn)在左手側(cè)的一個(gè)賦值。數(shù)字文本是右值,所以不得指讓,并不能出現(xiàn)在左側(cè)。以下是一個(gè)有效的語(yǔ)句:
int g = 20;
但是,下面不是一個(gè)有效的語(yǔ)句,會(huì)產(chǎn)生編譯時(shí)錯(cuò)誤:
10 = 20;