中文字幕理论片,69视频免费在线观看,亚洲成人app,国产1级毛片,刘涛最大尺度戏视频,欧美亚洲美女视频,2021韩国美女仙女屋vip视频

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
CSDN技術(shù)中心 第一章 什么是數(shù)組名?----一個(gè)讓你吃驚的事實(shí)!

第一章 什么是數(shù)組名?----一個(gè)讓你吃驚的事實(shí)!

數(shù)組是指針的基礎(chǔ),多數(shù)人就是從數(shù)組的學(xué)習(xí)開(kāi)始指針的旅程的。下面我節(jié)選一些在各種論壇和文章里經(jīng)常見(jiàn)到的關(guān)于數(shù)組的文字:
“一維數(shù)組是一級(jí)指針”
“二維數(shù)組是二級(jí)指針”
“數(shù)組名可以作為指針使用”
“數(shù)組名就是..........的常量指針”
“數(shù)組名就是..........的指針常量”
..................................
這些文字看起來(lái)非常熟悉吧?類似的文字還有許多,或許你就是經(jīng)常說(shuō)這些話的人呢。不過(guò)非常遺憾,這些文字都是錯(cuò)誤的,實(shí)際上數(shù)組名永遠(yuǎn)都不會(huì)是指針!這個(gè)結(jié)論也許會(huì)讓你震驚,但它的確是事實(shí)。數(shù)組名、指針、地址這幾個(gè)概念雖然是基礎(chǔ)中的基礎(chǔ),但它們恰恰是被混淆和濫用得最多的概念,把數(shù)組名說(shuō)成指針,是一個(gè)概念性的錯(cuò)誤,實(shí)質(zhì)是混淆了指針與地址兩個(gè)概念的本質(zhì)。俗話說(shuō)得好:淺水淹死人。因此,在討論數(shù)組之前,有必要先回過(guò)頭來(lái)澄清一下什么是指針,什么是地址,什么是數(shù)組名。

        指針是C語(yǔ)言具有低級(jí)語(yǔ)言特征的最直接的證據(jù)。在匯編語(yǔ)言里面,指針的概念隨處可見(jiàn)。比如SP,SP寄存器又叫堆棧指針,它的值是地址,由于SP保存的是地址,并且SP的值是不斷變化的,因此可以看作一個(gè)變量,而且是一個(gè)地址變量。地址也是C語(yǔ)言指針的值,C語(yǔ)言的指針跟SP這樣的寄存器雖然不完全一樣,但原理卻是相通的。C語(yǔ)言的指針也是一種地址變量,C89明確規(guī)定,指針是一個(gè)保存對(duì)象地址的變量。這里要注意的是,指針跟地址概念的不同,指針是一種地址變量,通常也叫指針變量,統(tǒng)稱指針。而地址則是地址變量的值。

        看到這里,也許你會(huì)覺(jué)得,這么簡(jiǎn)單的東西還用你來(lái)說(shuō)嗎?的確,對(duì)于p與&p來(lái)說(shuō),99%的人都能在0.1秒內(nèi)脫口而出誰(shuí)是指針,誰(shuí)是地址,但是,又有多少人在使用指針的過(guò)程中能夠始終如一毫不動(dòng)搖地遵循這兩個(gè)概念呢?不少人使用指針的時(shí)候就會(huì)自覺(jué)或不自覺(jué)地把指針和地址兩個(gè)概念混淆得一塌糊涂了,數(shù)組名的濫用就是一個(gè)活生生的例子。這一點(diǎn)甚至連一些經(jīng)典著作也沒(méi)能避免。

        不過(guò)也不能全怪你自己,筆者認(rèn)為某些國(guó)內(nèi)教材應(yīng)該承擔(dān)最大的責(zé)任。這些教材一開(kāi)始就沒(méi)有給讀者好好地分清指針與地址的區(qū)別,相反還在講述的過(guò)程中有意無(wú)意地混用這兩個(gè)概念。更有甚者,甚至在書(shū)中明言指針就是地址!說(shuō)這話的家伙最應(yīng)該在C語(yǔ)言這個(gè)地圖上抹掉,呵呵。兩個(gè)月前我在購(gòu)書(shū)中心隨手翻開(kāi)了某個(gè)作者主編的一本被冠以國(guó)家“十五”規(guī)劃重點(diǎn)研究項(xiàng)目的書(shū),書(shū)里就是這么寫(xiě)的。當(dāng)時(shí)筆者就感慨:不知道又要有多少人的思想被這家伙“強(qiáng)奸”了。

        實(shí)際上,地址這個(gè)東西,本來(lái)就是一種基本數(shù)據(jù)類型,本應(yīng)該在介紹整數(shù)、浮點(diǎn)、字符等基本類型的時(shí)候把地址顯式地放在一起討論,這樣在后面介紹指針與數(shù)組的時(shí)候就能避免許多誤解??上Р簧俳滩幕蛘吒緵](méi)有談及,或者就算提起這個(gè)類型也用了指針類型這個(gè)字眼。這就錯(cuò)了,指針不是類型,真正的類型是地址,指針只是存儲(chǔ)地址這種數(shù)據(jù)類型的變量!打個(gè)比方,對(duì)于
int i=10;
10是整數(shù),而i是存儲(chǔ)整數(shù)的變量,指針就好比這個(gè)i,地址就好比那個(gè)10。指針能夠進(jìn)行加減法,原因并不是因?yàn)樗侵羔槪訙p法則不是屬于指針這種變量的,而是地址這種數(shù)據(jù)類型的本能,正是因?yàn)榈刂肪哂屑訙p的能力,所以才使指針作為存放地址的變量能夠進(jìn)行加減運(yùn)算。這跟整數(shù)變量因?yàn)檎麛?shù)能夠進(jìn)行加減乘除因而它也能進(jìn)行加減乘除一個(gè)道理。


        那么數(shù)組名又應(yīng)該如何理解呢?用來(lái)存放數(shù)組的區(qū)域是一塊在棧中靜態(tài)分配的內(nèi)存(非static),而數(shù)組名是這塊內(nèi)存的代表,它被定義為這塊內(nèi)存的首地址。這就說(shuō)明了數(shù)組名是一個(gè)地址,而且,還是一個(gè)不可修改的常量,完整地說(shuō),就是一個(gè)地址常量。數(shù)組名跟枚舉常量類似,都屬于符號(hào)常量。數(shù)組名這個(gè)符號(hào),就代表了那塊內(nèi)存的首地址。注意了!不是數(shù)組名這個(gè)符號(hào)的值是那塊內(nèi)存的首地址,而是數(shù)組名這個(gè)符號(hào)本身就代表了首地址這個(gè)地址值,它就是這個(gè)地址,這就是數(shù)組名屬于符號(hào)常量的意義所在。由于數(shù)組名是一種符號(hào)常量,因此它是一個(gè)右值,而指針,作為變量,卻是一個(gè)左值,一個(gè)右值永遠(yuǎn)都不會(huì)是左值,那么,數(shù)組名永遠(yuǎn)都不會(huì)是指針!不管什么話,只要說(shuō)數(shù)組名是一個(gè)指針的,都是錯(cuò)誤的!就象把剛才int i=10例子中的10說(shuō)成是整數(shù)變量一樣,在最基本的立足點(diǎn)上就已經(jīng)完錯(cuò)了。

        總之要牢牢記住,數(shù)組名是一個(gè)地址,一個(gè)符號(hào)地址常量,不是一個(gè)變量,更不是一個(gè)作為變量的指針!

        在數(shù)組名并非指針這個(gè)問(wèn)題上,通常會(huì)產(chǎn)生兩種疑問(wèn):
1。作為形參的數(shù)組,不是會(huì)被轉(zhuǎn)換為指針嗎?
2。如果形參是一個(gè)指針,數(shù)組名可以作為實(shí)參傳遞給那個(gè)指針,難道不是說(shuō)明了數(shù)組名是一個(gè)指針嗎?

        首先,C語(yǔ)言之所以把作為形參的數(shù)組看作指針,并非因?yàn)閿?shù)組名可以轉(zhuǎn)換為指針,而是因?yàn)楫?dāng)初ANSI委員會(huì)制定標(biāo)準(zhǔn)的時(shí)候,從C程序的執(zhí)行效率出發(fā),不主張參數(shù)傳遞時(shí)復(fù)制整個(gè)數(shù)組,而是傳遞數(shù)組的首地址,由被調(diào)函數(shù)根據(jù)這個(gè)首地址處理數(shù)組中的內(nèi)容。那么誰(shuí)能承擔(dān)這種“轉(zhuǎn)換”呢?這個(gè)主體必須具有地址數(shù)據(jù)類型,同時(shí)應(yīng)該是一個(gè)變量,滿足這兩個(gè)條件的,非指針莫屬了。要注意的是,這種“轉(zhuǎn)換”只是一種邏輯看法上的轉(zhuǎn)換,實(shí)際當(dāng)中并沒(méi)有發(fā)生這個(gè)過(guò)程,沒(méi)有任何數(shù)組實(shí)體被轉(zhuǎn)換為指針實(shí)體。另一方面,大家不要被“轉(zhuǎn)換”這個(gè)字眼給蒙蔽了,轉(zhuǎn)換并不意味著相同,實(shí)際上,正是因?yàn)椴幌嗤艜?huì)有轉(zhuǎn)換,相同的話還轉(zhuǎn)來(lái)干嗎?這好比現(xiàn)在社會(huì)上有不少人“變性”,一個(gè)男人可以“轉(zhuǎn)換”為一個(gè)女人,那是不是應(yīng)該認(rèn)為男人跟女人是相同的?這不是笑話么。

        第二,函數(shù)參數(shù)傳遞的過(guò)程,本質(zhì)上是一種賦值過(guò)程。C89對(duì)函數(shù)調(diào)用是這樣規(guī)定的:函數(shù)調(diào)用由一個(gè)后綴表達(dá)式(稱為函數(shù)標(biāo)志符,function designator)后跟由圓括號(hào)括起來(lái)的賦值表達(dá)式列表組成,在調(diào)用函數(shù)之前,函數(shù)的每個(gè)實(shí)際參數(shù)將被復(fù)制,所有的實(shí)際參數(shù)嚴(yán)格地按值傳遞。因此,形參實(shí)際上所期望得到的東西,并不是實(shí)參本身,而是實(shí)參的值或者實(shí)參所代表的值!舉個(gè)例來(lái)說(shuō),對(duì)于一個(gè)函數(shù)聲明:

void fun(int i);

我們可以用一個(gè)整數(shù)變量int n作實(shí)參來(lái)調(diào)用fun,就是fun(n);當(dāng)然,也正如大家所熟悉的那樣,可以用一個(gè)整數(shù)常量例如10來(lái)做實(shí)參,就是fun(10);那么,按照第二個(gè)疑問(wèn)的看法,由于形參是一個(gè)整數(shù)變量,而10可以作為實(shí)參傳遞給i,豈不就說(shuō)明10是一個(gè)整數(shù)變量嗎?這顯然是謬誤。實(shí)際上,對(duì)于形參i來(lái)說(shuō),用來(lái)聲明i的類型說(shuō)明符int,所起的作用是用來(lái)說(shuō)明需要傳遞給i一個(gè)整數(shù),并非要求實(shí)參也是一個(gè)整數(shù)變量,i真正所期望的,只是一個(gè)整數(shù),僅此而已,至于實(shí)參是什么,跟i沒(méi)有任何關(guān)系,它才不管呢,只要能正確給i傳遞一個(gè)整數(shù)就OK了。當(dāng)形參是指針的時(shí)候,所發(fā)生的事情跟這個(gè)是相同的。指針形參并沒(méi)有要求實(shí)參也是一個(gè)指針,它需要的是一個(gè)地址,誰(shuí)能給予它一個(gè)地址?顯然指針、地址常量和符號(hào)地址常量都能滿足這個(gè)要求,而數(shù)組名作為符號(hào)地址常量正是指針形參所需要的地址,這個(gè)過(guò)程就跟把一個(gè)整數(shù)賦值給一個(gè)整數(shù)變量一樣簡(jiǎn)單!

        在后面的章節(jié)中,筆者將嚴(yán)格地使用地址這一概念,該是地址時(shí)就用地址,該是指針時(shí)就用指針,以免象其它教材那樣給讀者一個(gè)錯(cuò)誤的暗示。


本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
水滴石穿C語(yǔ)言之指針綜合談 - C語(yǔ)言、C++編程技術(shù)館 - 博客園
C語(yǔ)言學(xué)習(xí)之基礎(chǔ)知識(shí)點(diǎn)—指針!上萬(wàn)字的干貨知識(shí)
C語(yǔ)言變量名和地址的關(guān)系【轉(zhuǎn)載】//基礎(chǔ)的東西
C語(yǔ)言基礎(chǔ)知識(shí)最核心的指針知識(shí)總結(jié)第一部分(頁(yè)內(nèi)代碼可以復(fù)制)
Object Pascal 數(shù)據(jù)類型
C語(yǔ)言經(jīng)典筆試題(一)
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服