Objective-C 指針
Objective-C中的指針很容易和有趣的學習。更容易地執行一些Objective-C語言的編程任務的指針,動態內存分配,其他的任務,如不能執行,而無需使用指針。因此,它成為必要學習指針成為一個完美的Objective-C程序員。讓我們開始簡單輕鬆的學習步驟。
如大家了解,每一個變量是一個內存位置和每一個存儲單元都有其定義的地址,可以使用符號(&)的運算符,它表示內存中的地址訪問。考慮下麵的例子,這將打印地址定義的變量:
#import <Foundation/Foundation.h> int main () { int var1; char var2[10]; NSLog(@"Address of var1 variable: %x ", &var1 ); NSLog(@"Address of var2 variable: %x ", &var2 ); return 0; }
上麵的代碼編譯和執行時,它產生的結果如下的內容:
2013-09-13 03:18:45.727 demo[17552] Address of var1 variable: 1c0843fc 2013-09-13 03:18:45.728 demo[17552] Address of var2 variable: 1c0843f0
所以,明白了什麼是內存地址,以及如何訪問它,這些是基本的概念。現在,讓我們看到了什麼是一個指針。
什麼是指針?
指針是一個變量,其值是另一個變量,即直接地址的內存位置的地址。像任何變量或常量,在使用之前必須聲明指針,可以用它來存儲任何變量地址。一個指針變量聲明的一般形式是:
type *var-name;
在這裡,type 為指針的基本類型,它必須是一個有效的Objective-C的數據類型和 var-name 是變量的指針。用來聲明指針的是一個星號(*)。然而,在這個聲明中的星號是被用來作為一個指針來指定一個變量。以下是有效的指針聲明:
int *ip; /* yiibaier to an integer */ double *dp; /* yiibaier to a double */ float *fp; /* yiibaier to a float */ char *ch /* yiibaier to a character */
所有的指針的值的實際數據類型,無論是整數,浮點數,字符,否則,是一樣的,很長的十六進製數字,表示一個內存地址。不同數據類型的指針之間的唯一區彆是變量或常量的指針指向的數據類型。
如何使用指針?
有一些重要的操作,我們將非常頻繁地與指針的幫助。 (a)我們定義一個指針變量,(b)分配一個指針變量的地址,(c)最後訪問提供的地址指針變量的值。這是通過使用一元運算符*返回值的變量,其操作數位於指定的地址。下麵的例子使用這些操作:
#import <Foundation/Foundation.h> int main () { int var = 20; /* actual variable declaration */ int *ip; /* yiibaier variable declaration */ ip = &var; /* store address of var in yiibaier variable*/ NSLog(@"Address of var variable: %x ", &var ); /* address stored in yiibaier variable */ NSLog(@"Address stored in ip variable: %x ", ip ); /* access the value using the yiibaier */ NSLog(@"Value of *ip variable: %d ", *ip ); return 0; }
上麵的代碼編譯和執行時,它產生的結果如下的東西:
2013-09-13 03:20:21.873 demo[24179] Address of var variable: 337ed41c 2013-09-13 03:20:21.873 demo[24179] Address stored in ip variable: 337ed41c 2013-09-13 03:20:21.874 demo[24179] Value of *ip variable: 20
Objective-C 的空指針
它始終是一個很好的做法,一個指針變量分配一個NULL值的情況下,冇有確切的地址被分配。這樣做是在當時的變量聲明。被指定為NULL 指針,被稱為一個空指針。
NULL指針是一個常數與幾個標準庫中定義的一個零值。考慮下麵的程序:
#import <Foundation/Foundation.h> int main () { int *ptr = NULL; NSLog(@"The value of ptr is : %x ", ptr ); return 0; }
上麵的代碼編譯和執行時,它會產生以下結果:
2013-09-13 03:21:19.447 demo[28027] The value of ptr is : 0
大部分的作業係統,程序不允許被保留,因為該內存由操作係統來訪問內存地址0處。然而,存儲器地址0具有特殊的意義,它的信號,指針不指向一個可訪問的存儲器位置。但是,按照慣例,如果一個指針包含空值(零),它被假定為指向什麼。
要檢查空指針,可以使用一個if語句如下:
if(ptr) /* succeeds if p is not null */ if(!ptr) /* succeeds if p is null */
Objective-C語言指針的詳細介紹:
指針有很多,但簡單的概念,他們在Objective-C編程是非常重要的。有以下幾個重要的指針概念,這應該是一個Objective-C語言程序員清楚:
概念 | 描述 |
---|---|
Objective-C 指針運算 | 有四種算術運算符,可以用在指針中: ++, --, +, - |
Objective-C 數組的指針 | 可以定義數組指針持有數值。 |
Objective-C 指向指針的指針 | Objective-C中可以讓一個指針指向指針。 |
Objective-C 傳遞指針的函數 | 引用或按地址傳遞參數的功能,既可以傳遞的參數調用函數被調用函數改變。 |
Objective-C 函數返回指針 | Objective-C中允許一個函數返回一個指向局部變量,以及靜態變量和動態分配的內存。 |