指針與數(shù)組是C語(yǔ)言中很重要的兩個(gè)概念彤路,它們之間有著密切的關(guān)系,利用這種關(guān)系芥映,可以增強(qiáng)處理數(shù)組的靈活性洲尊,加快運(yùn)行速度,本文著重討論指針與數(shù)組之間的聯(lián)系及在編程中的應(yīng)用奈偏。
1.指針與數(shù)組的關(guān)系
當(dāng)一個(gè)指針變量被初始化成數(shù)組名時(shí)坞嘀,就說(shuō)該指針變量指向了數(shù)組。如:
char str[20], *ptr;
ptr=str;
ptr被置為數(shù)組str的第一個(gè)元素的地址惊来,因?yàn)閿?shù)組名就是該數(shù)組的首地址丽涩,也是數(shù)組第一個(gè)元素的地址。此時(shí)可以認(rèn)為指針ptr就是數(shù)組str(反之不成立),這樣原來(lái)對(duì)數(shù)組的處理都可以用指針來(lái)實(shí)現(xiàn)矢渊。如對(duì)數(shù)組元素的訪問(wèn)继准,既可以用下標(biāo)變量訪問(wèn),也可以用指針訪問(wèn)矮男。
2.指向數(shù)組元素的指針
若有如下定義:
int a[10], *pa;
pa=a;
則p=&a[0]是將數(shù)組第1個(gè)元素的地址賦給了指針變量p移必。
實(shí)際上,C語(yǔ)言中數(shù)組名就是數(shù)組的首地址昂灵,所以第一個(gè)元素的地址可以用兩種方法獲得:p=&a[0]或p=a避凝。
這兩種方法在形式上相像舞萄,其區(qū)別在于:pa是指針變量眨补,a是數(shù)組名。值得注意的是:pa是一個(gè)可以變化的指針變量倒脓,而a是一個(gè)常數(shù)撑螺。因?yàn)閿?shù)組一經(jīng)被說(shuō)明,數(shù)組的地址也就是固定的崎弃,因此a是不能變化的甘晤,不允許使用a++、++a或語(yǔ)句a+=10饲做,而pa++线婚、++pa、pa+=10則是正確的盆均。由此可見(jiàn)塞弊,此時(shí)指針與數(shù)組融為一體。
3.指針與一維數(shù)組
理解指針與一維數(shù)組的關(guān)系泪姨,首先要了解在編譯系統(tǒng)中游沿,一維數(shù)組的存儲(chǔ)組織形式和對(duì)數(shù)組元素的訪問(wèn)方法。
一維數(shù)組是一個(gè)線形表肮砾,它被存放在一片連續(xù)的內(nèi)存單元中诀黍。C語(yǔ)言對(duì)數(shù)組的訪問(wèn)是通過(guò)數(shù)組名(數(shù)組的起始地址)加上相對(duì)于起始地址的相對(duì)量(由下標(biāo)變量給出),得到要訪問(wèn)的數(shù)組元素的單元地址仗处,然后再對(duì)計(jì)算出的單元地址的內(nèi)容進(jìn)行訪問(wèn)眯勾。通常把數(shù)據(jù)類型所占單元的字節(jié)個(gè)數(shù)稱為擴(kuò)大因子。
實(shí)際上編譯系統(tǒng)將數(shù)組元素的形式a[i]轉(zhuǎn)換成*(a+i)婆誓,然后才進(jìn)行運(yùn)算吃环。對(duì)于一般數(shù)組元素的形式:<數(shù)組名>[<下標(biāo)表達(dá)式>],編譯程序?qū)⑵滢D(zhuǎn)換成:*(<數(shù)組名>+<下標(biāo)表達(dá)式>)旷档,其中下標(biāo)表達(dá)式為:下標(biāo)表達(dá)式*擴(kuò)大因子模叙。整個(gè)式子計(jì)算結(jié)果是一個(gè)內(nèi)存地址,最后的結(jié)果為:*<地址>=<地址所對(duì)應(yīng)單元的地址的內(nèi)容>鞋屈。由此可見(jiàn)范咨,C語(yǔ)言對(duì)數(shù)組的處理故觅,實(shí)際上是轉(zhuǎn)換成指針地址的運(yùn)算。
數(shù)組與指針暗中結(jié)合在一起渠啊。因此输吏,任何能由下標(biāo)完成的操作,都可以用指針來(lái)實(shí)現(xiàn)替蛉,一個(gè)不帶下標(biāo)的數(shù)組名就是一個(gè)指向該數(shù)組的指針贯溅。
4.指針與多維數(shù)組
用指針變量可以指向一維數(shù)組,也可以指向多維數(shù)組躲查。但在概念上和使用上它浅,多維數(shù)組的指針比一維數(shù)組的指針要復(fù)雜一些。
例如镣煮,在一個(gè)三維數(shù)組中姐霍,引用元素c[i][j][k]的地址計(jì)算最終將換成:*(*(*(c+i)+j)+k)。了解了多維數(shù)組的存儲(chǔ)形式和訪問(wèn)多維數(shù)組元素的內(nèi)部轉(zhuǎn)換公式后典唇,再看當(dāng)一個(gè)指針變量指向多維數(shù)組及其元素的情況镊折。
1 指向數(shù)組元素的指針變量
若有如下說(shuō)明:
int a[3][4];
int *p;
p=a;
p是指向整型變量的指針;p=a使p指向整型二維數(shù)組a的首地址介衔。
『夼摺*(*(p+1)+2)表示取a[1][2]的內(nèi)容;*p表示取a[0][1]的內(nèi)容炎咖,因?yàn)閜是指向整型變量的指針赃泡;p++表示p的內(nèi)容加1,即p中存放的地址增加一個(gè)整型量的字節(jié)數(shù)2塘装,從而使p指向下一個(gè)整型量a[0][1]陵且。
2 指向由j個(gè)整數(shù)組成的一維數(shù)組的指針變量
當(dāng)指針變量p不是指向整型變量愉镰,而是指向一個(gè)包含j個(gè)元素的一維數(shù)組边酒。如果p=a[0]揽涮,則p++不是指向a[0][1],而是指向a[1]阴幌。這時(shí)p的增值以一維數(shù)組的長(zhǎng)度為單位勺阐。
5.指針與字符數(shù)組
C語(yǔ)言中許多字符串操作都是由指向字符數(shù)組的指針及指針的運(yùn)算來(lái)實(shí)現(xiàn)的。因?yàn)閷?duì)于字符串來(lái)說(shuō)矛双,一般都是嚴(yán)格的順序存取方式渊抽,使用指針可以打破這種存取方式,更為靈活地處理字符串议忽。
另外由于字符串以′\0′作為結(jié)束符懒闷,而′\0′的ASCII碼是0,它正好是C語(yǔ)言的邏輯假值,所以可以直接用它作為判斷字符串結(jié)束的條件愤估,而不需要用字符串的長(zhǎng)度來(lái)判斷帮辟。C語(yǔ)言中類似的字符串處理函數(shù)都是用指針來(lái)完成,使程序運(yùn)行速度更快玩焰、效率更高由驹,而且更易于理解。
轉(zhuǎn) 指針與數(shù)組
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
- 文/潘曉璐 我一進(jìn)店門皂冰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人养篓,你說(shuō)我怎么就攤上這事秃流。” “怎么了柳弄?”我有些...
- 文/不壞的土叔 我叫張陵舶胀,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我碧注,道長(zhǎng)嚣伐,這世上最難降的妖魔是什么? 我笑而不...
- 正文 為了忘掉前任萍丐,我火速辦了婚禮轩端,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘逝变。我一直安慰自己基茵,他們只是感情好,可當(dāng)我...
- 文/花漫 我一把揭開白布壳影。 她就那樣靜靜地躺著拱层,像睡著了一般。 火紅的嫁衣襯著肌膚如雪宴咧。 梳的紋絲不亂的頭發(fā)上根灯,一...
- 那天,我揣著相機(jī)與錄音,去河邊找鬼烙肺。 笑死芥驳,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的茬高。 我是一名探鬼主播兆旬,決...
- 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼怎栽!你這毒婦竟也來(lái)了丽猬?” 一聲冷哼從身側(cè)響起,我...
- 序言:老撾萬(wàn)榮一對(duì)情侶失蹤熏瞄,失蹤者是張志新(化名)和其女友劉穎脚祟,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體强饮,經(jīng)...
- 正文 獨(dú)居荒郊野嶺守林人離奇死亡由桌,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
- 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了邮丰。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片行您。...
- 正文 年R本政府宣布捌斧,位于F島的核電站,受9級(jí)特大地震影響泉沾,放射性物質(zhì)發(fā)生泄漏捞蚂。R本人自食惡果不足惜,卻給世界環(huán)境...
- 文/蒙蒙 一跷究、第九天 我趴在偏房一處隱蔽的房頂上張望姓迅。 院中可真熱鬧,春花似錦揭朝、人聲如沸队贱。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)柱嫌。三九已至,卻和暖如春屯换,著一層夾襖步出監(jiān)牢的瞬間编丘,已是汗流浹背与学。 一陣腳步聲響...
- 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像抑片,于是被迫代替她去往敵國(guó)和親卵佛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
推薦閱讀更多精彩內(nèi)容
- 前言:復(fù)雜類型說(shuō)明 要了解指針,多多少少會(huì)出現(xiàn)一些比較復(fù)雜的類型,所以我先介紹一下如何完全理解一個(gè)復(fù)雜類型,要理解...
- 一直打野植捎,然后出山衙解?那是順風(fēng)局,低端局焰枢! 高端局的套路是蚓峦,打野,抓住機(jī)會(huì)配合隊(duì)友殺人济锄!打野殺人暑椰,打野殺人! 優(yōu)先出...
- 她漫步走在小路上拟淮,右鞋底踢著石子干茉,做鞋底抹煞地板。這些年來(lái)很泊,要想的事情太多了,難得時(shí)間靜一靜沾谓。 她翻開一本...