指針
int i = 10;
int *p;
p = &i;
NSLog(@"i:%d,p:%p,*p:%d",i,p,*p);
打印結(jié)果:
i:10,p:0x7fff5fbff84c,*p:10
錯(cuò)誤示例:
*p = &i;
*號(hào)如果不在聲明語(yǔ)句中,而只是右邊有表達(dá)式的話棉圈,表明取*號(hào)右邊變量中所存地址對(duì)應(yīng)內(nèi)存中的數(shù)據(jù)(取值涩堤、指針運(yùn)算符)
p是int*類型(一個(gè)指向int的指針)
*是這個(gè)變量類型名稱的一部分(當(dāng)需要這種類型的變量p,應(yīng)該這樣寫:(int*)p)
- 在Objective-C中,引用對(duì)象使用的就是指針
NSString *s = @"This is a string";
在純粹的C語(yǔ)言中,聲明指向整形的指針為p分瘾,在代碼中更傾向于寫成 *p
聲明之外的意思是:指針p指向的對(duì)象
寫成*p是因?yàn)橄ML問(wèn)指針?biāo)赶虻恼巫兞刻ノВ@就是所謂的指針的解引用(dereferencing)
而在Objective-C中,將指向?qū)ο蟮闹羔樢暈閷?duì)象德召,這樣就永遠(yuǎn)不能解引用白魂。
如已聲明指向NSString的指針s,我們不會(huì)使用*s,而是直接使用s,就好像它是字符串一樣上岗。在OC語(yǔ)言中處理對(duì)象時(shí)更傾向于使用指針福荸,而不是指針指向的對(duì)象。在后臺(tái)OC語(yǔ)言會(huì)處理好凌亂的事務(wù)肴掷,會(huì)監(jiān)視指針指向的內(nèi)存敬锐,處理內(nèi)存必要的操作辞嗡。這對(duì)程序員來(lái)說(shuō)很便利,卻會(huì)導(dǎo)致代碼松散滞造。我們更傾向于說(shuō)"s是一個(gè)NSString"续室,實(shí)際上它是一個(gè)指向NSString的指針。
- 數(shù)據(jù)類型 *指針變量名稱;
char *c;
double *d;
"數(shù)據(jù)類型"為該指針變量所存儲(chǔ)的指針指向的存儲(chǔ)單元中的數(shù)據(jù)的類型谒养。