鍍金池/ 教程/ C/ Objective-C 指針
Objective-C 多態(tài)性
Objective-C 預(yù)處理器
Objective-C for循環(huán)
Objective-C 開(kāi)發(fā)環(huán)境(安裝配置)
Obj-C Foundation/基礎(chǔ)框架
Objective-C 指針運(yùn)算
Objective-C 循環(huán)
Objective-C 錯(cuò)誤處理
Objective-C while循環(huán)
Objective-C if語(yǔ)句
Objective-C do...while循環(huán)
Objective-C教程
Objective-C 嵌套switch語(yǔ)句
Objective-C 函數(shù)按值調(diào)用
Objective-C 常量
Objective-C 運(yùn)算符
Objective-C 數(shù)據(jù)類(lèi)型
Objective-C 邏輯運(yùn)算符
Objective-C 數(shù)組作為函數(shù)參數(shù)傳遞
Objective-C struct/結(jié)構(gòu)
Objective-C 嵌套循環(huán)
Objective-C 函數(shù)引用調(diào)用
Objective-C 日志處理
Objective-C 數(shù)據(jù)存儲(chǔ)
Objective-C 教程首頁(yè)
Objective-C 擴(kuò)展
Objective-C 異常處理
Objective-C 類(lèi)型轉(zhuǎn)換
Objective-C 嵌套 if 語(yǔ)句
Objective-C typedef
Objective-C 決策
Objective-C 指針的數(shù)組
Objective-C Protocols/協(xié)議
Objective-C 日期和時(shí)間
Objective-C 指針
Objective-C 內(nèi)存管理
命令行參數(shù)
Objective-C NSString/字符串
Objective-C 動(dòng)態(tài)綁定
Objective-C 復(fù)合對(duì)象
Objective-C Arrays/數(shù)組
Objective-C 位運(yùn)算符
Objective-C 指向指針的指針
Objective-C 從函數(shù)返回?cái)?shù)組
Objective-C Posing/冒充
Objective-C Categories/類(lèi)別
Objective-C 文件處理
Objective-C 賦值運(yùn)算符
Objective-C 函數(shù)返回指針
Objective-C if...else 語(yǔ)句
Objective-C switch語(yǔ)句
Objective-C URL加載系統(tǒng)
Objective-C 算術(shù)運(yùn)算符
Objective-C Numbers/數(shù)字
Objective-C語(yǔ)言程序結(jié)構(gòu)
Objective-C 快速枚舉
Objective-C 基本語(yǔ)法
Objective-C 類(lèi)&對(duì)象
Objective-C 變量
Objective-C 關(guān)系運(yùn)算符
Objective-C 塊
Objective-C break語(yǔ)句
Objective-C continue語(yǔ)句
Objective-C 語(yǔ)言概述
Objective C 文本和字符串
Objective-C 函數(shù)
Objective-C 傳遞函數(shù)的指針
Objective-C 數(shù)組的指針
Objective-C 多維數(shù)組
Objective-C 繼承
Objective-C 數(shù)據(jù)封裝

Objective-C 指針

Objective-C中的指針很容易和有趣的學(xué)習(xí)。更容易地執(zhí)行一些Objective-C語(yǔ)言的編程任務(wù)的指針,動(dòng)態(tài)內(nèi)存分配,其他的任務(wù),如不能執(zhí)行,而無(wú)需使用指針。因此,它成為必要學(xué)習(xí)指針成為一個(gè)完美的Objective-C程序員。讓我們開(kāi)始簡(jiǎn)單輕松的學(xué)習(xí)步驟。

如大家了解,每一個(gè)變量是一個(gè)內(nèi)存位置和每一個(gè)存儲(chǔ)單元都有其定義的地址,可以使用符號(hào)(&)的運(yùn)算符,它表示內(nèi)存中的地址訪(fǎng)問(wèn)??紤]下面的例子,這將打印地址定義的變量:

#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;
}

上面的代碼編譯和執(zhí)行時(shí),它產(chǎn)生的結(jié)果如下的內(nèi)容:

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

所以,明白了什么是內(nèi)存地址,以及如何訪(fǎng)問(wèn)它,這些是基本的概念?,F(xiàn)在,讓我們看到了什么是一個(gè)指針。

什么是指針?

指針是一個(gè)變量,其值是另一個(gè)變量,即直接地址的內(nèi)存位置的地址。像任何變量或常量,在使用之前必須聲明指針,可以用它來(lái)存儲(chǔ)任何變量地址。一個(gè)指針變量聲明的一般形式是:

type *var-name;

在這里,type 為指針的基本類(lèi)型,它必須是一個(gè)有效的Objective-C的數(shù)據(jù)類(lèi)型和 var-name 是變量的指針。用來(lái)聲明指針的是一個(gè)星號(hào)(*)。然而,在這個(gè)聲明中的星號(hào)是被用來(lái)作為一個(gè)指針來(lái)指定一個(gè)變量。以下是有效的指針聲明:

int    *ip;    /* yiibaier to an integer */
double *dp;    /* yiibaier to a double */
float  *fp;    /* yiibaier to a float */
char   *ch     /* yiibaier to a character */

所有的指針的值的實(shí)際數(shù)據(jù)類(lèi)型,無(wú)論是整數(shù),浮點(diǎn)數(shù),字符,否則,是一樣的,很長(zhǎng)的十六進(jìn)制數(shù)字,表示一個(gè)內(nèi)存地址。不同數(shù)據(jù)類(lèi)型的指針之間的唯一區(qū)別是變量或常量的指針指向的數(shù)據(jù)類(lèi)型。

如何使用指針?

有一些重要的操作,我們將非常頻繁地與指針的幫助。 (a)我們定義一個(gè)指針變量,(b)分配一個(gè)指針變量的地址,(c)最后訪(fǎng)問(wèn)提供的地址指針變量的值。這是通過(guò)使用一元運(yùn)算符*返回值的變量,其操作數(shù)位于指定的地址。下面的例子使用這些操作:

#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;
}

上面的代碼編譯和執(zhí)行時(shí),它產(chǎn)生的結(jié)果如下的東西:

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 的空指針

它始終是一個(gè)很好的做法,一個(gè)指針變量分配一個(gè)NULL值的情況下,沒(méi)有確切的地址被分配。這樣做是在當(dāng)時(shí)的變量聲明。被指定為NULL 指針,被稱(chēng)為一個(gè)空指針。

NULL指針是一個(gè)常數(shù)與幾個(gè)標(biāo)準(zhǔn)庫(kù)中定義的一個(gè)零值。考慮下面的程序:

#import <Foundation/Foundation.h>

int main ()
{
   int  *ptr = NULL;

   NSLog(@"The value of ptr is : %x
", ptr  );
 
   return 0;
}

上面的代碼編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生以下結(jié)果:

2013-09-13 03:21:19.447 demo[28027] The value of ptr is : 0

大部分的作業(yè)系統(tǒng),程序不允許被保留,因?yàn)樵搩?nèi)存由操作系統(tǒng)來(lái)訪(fǎng)問(wèn)內(nèi)存地址0處。然而,存儲(chǔ)器地址0具有特殊的意義,它的信號(hào),指針不指向一個(gè)可訪(fǎng)問(wèn)的存儲(chǔ)器位置。但是,按照慣例,如果一個(gè)指針包含空值(零),它被假定為指向什么。

要檢查空指針,可以使用一個(gè)if語(yǔ)句如下:

if(ptr)     /* succeeds if p is not null */
if(!ptr)    /* succeeds if p is null */

Objective-C語(yǔ)言指針的詳細(xì)介紹:

指針有很多,但簡(jiǎn)單的概念,他們?cè)贠bjective-C編程是非常重要的。有以下幾個(gè)重要的指針概念,這應(yīng)該是一個(gè)Objective-C語(yǔ)言程序員清楚:

概念 描述
Objective-C 指針運(yùn)算 有四種算術(shù)運(yùn)算符,可以用在指針中:  ++, --, +, -
Objective-C 數(shù)組的指針 可以定義數(shù)組指針持有數(shù)值。
Objective-C 指向指針的指針 Objective-C中可以讓一個(gè)指針指向指針。
Objective-C 傳遞指針的函數(shù) 引用或按地址傳遞參數(shù)的功能,既可以傳遞的參數(shù)調(diào)用函數(shù)被調(diào)用函數(shù)改變。
Objective-C 函數(shù)返回指針 Objective-C中允許一個(gè)函數(shù)返回一個(gè)指向局部變量,以及靜態(tài)變量和動(dòng)態(tài)分配的內(nèi)存。