精品一区二区中文在线,无遮挡h肉动漫在线观看,国产99视频精品免视看9,成全免费高清大全

什么是數組名

時間:2024-07-15 04:44:07 資料大全 我要投稿
  • 相關推薦

什么是數組名

  實際上數組名永遠都不會是指針! 指針是C語言具有低級語言特征的最直接的證據,

什么是數組名

。在匯編語言里面,指針的概念隨處可見。比如SP,SP寄存器又叫堆棧指針,它的值是地址,由于SP保存的是地址,并且SP的值是不斷變化的,因此可以看作一個變量,而且是一個地址變量。地址也是C語言指針的值,C語言的指針跟SP這樣的寄存器雖然不完全一樣,但原理卻是相通的。C語言的指針也是一種地址變量,C89明確規定,指針是一個保存對象地址的變量。這里要注意的是,指針跟地址概念的不同,指針是一種地址變量,通常也叫指針變量,統稱指針。而地址則是地址變量的值。

  看到這里,也許你會覺得,這么簡單的東西還用你來說嗎?的確,對于p與&p來說,99%的人都能在0.1秒內脫口而出誰是指針,誰是地址,但是,又有多少人在使用指針的過程中能夠始終如一毫不動搖地遵循這兩個概念呢?不少人使用指針的時候就會自覺或不自覺地把指針和地址兩個概念混淆得一塌糊涂了,數組名的濫用就是一個活生生的例子。這一點甚至連一些經典著作也沒能避免。

  不過也不能全怪你自己,筆者認為某些國內教材應該承擔最大的責任。這些教材一開始就沒有給讀者好好地分清指針與地址的區別,相反還在講述的過程中有意無意地混用這兩個概念。更有甚者,甚至在書中明言指針就是地址!說這話的家伙最應該在C語言這個地圖上抹掉,呵呵。兩個月前我在購書中心隨手翻開了某個作者主編的一本被冠以國家“十五”規劃重點研究項目的書,書里就是這么寫的。當時筆者就感慨:不知道又要有多少人的思想被這家伙“ ”了。

  實際上,地址這個東西,本來就是一種基本數據類型,本應該在介紹整數、浮點、字符等基本類型的時候把地址顯式地放在一起討論,這樣在后面介紹指針與數組的時候就能避免許多誤解。可惜不少教材或者根本沒有談及,或者就算提起這個類型也用了指針類型這個字眼。這就錯了,指針不是類型,真正的類型是地址,指針只是存儲地址這種數據類型的變量!打個比方,對于

  int i=10;

  10是整數,而i是存儲整數的變量,指針就好比這個i,地址就好比那個10。指針能夠進行加減法,原因并不是因為它是指針,加減法則不是屬于指針這種變量的,而是地址這種數據類型的本能,正是因為地址具有加減的能力,所以才使指針作為存放地址的變量能夠進行加減運算。這跟整數變量因為整數能夠進行加減乘除因而它也能進行加減乘除一個道理。

  那么數組名又應該如何理解呢?用來存放數組的區域是一塊在棧中靜態分配的內存(非static),而數組名是這塊內存的代表,它被定義為這塊內存的首地址,

資料共享平臺

什么是數組名》(http://salifelink.com)。這就說明了數組名是一個地址,而且,還是一個不可修改的常量,完整地說,就是一個地址常量。數組名跟枚舉常量類似,都屬于符號常量。數組名這個符號,就代表了那塊內存的首地址。注意了!不是數組名這個符號的值是那塊內存的首地址,而是數組名這個符號本身就代表了首地址這個地址值,它就是這個地址,這就是數組名屬于符號常量的意義所在。由于數組名是一種符號常量,因此它是一個右值,而指針,作為變量,卻是一個左值,一個右值永遠都不會是左值,那么,數組名永遠都不會是指針!不管什么話,只要說數組名是一個指針的,都是錯誤的!就象把剛才int i=10例子中的10說成是整數變量一樣,在最基本的立足點上就已經完錯了。

  總之要牢牢記住,數組名是一個地址,一個符號地址常量,不是一個變量,更不是一個作為變量的指針!

  在數組名并非指針這個問題上,通常會產生兩種疑問:

  1。作為形參的數組,不是會被轉換為指針嗎?

  2。如果形參是一個指針,數組名可以作為實參傳遞給那個指針,難道不是說明了數組名是一個指針嗎?

  首先,C語言之所以把作為形參的數組看作指針,并非因為數組名可以轉換為指針,而是因為當初ANSI委員會制定標準的時候,從C程序的執行效率出發,不主張參數傳遞時復制整個數組,而是傳遞數組的首地址,由被調函數根據這個首地址處理數組中的內容。那么誰能承擔這種“轉換”呢?這個主體必須具有地址數據類型,同時應該是一個變量,滿足這兩個條件的,非指針莫屬了。要注意的是,這種“轉換”只是一種邏輯看法上的轉換,實際當中并沒有發生這個過程,沒有任何數組實體被轉換為指針實體。另一方面,大家不要被“轉換”這個字眼給蒙蔽了,轉換并不意味著相同,實際上,正是因為不相同才會有轉換,相同的話還轉來干嗎?這好比現在社會上有不少人“變性”,一個男人可以“轉換”為一個女人,那是不是應該認為男人跟女人是相同的?這不是笑話么。

  第二,函數參數傳遞的過程,本質上是一種賦值過程。C89對函數調用是這樣規定的:函數調用由一個后綴表達式(稱為函數標志符,function designator)后跟由圓括號括起來的賦值表達式列表組成,在調用函數之前,函數的每個實際參數將被復制,所有的實際參數嚴格地按值傳遞。因此,形參實際上所期望得到的東西,并不是實參本身,而是實參的值或者實參所代表的值!舉個例來說,對于一個函數聲明:

  void fun(int i);

【什么是數組名】相關文章:

什么山什么水的成語09-04

什么七什么八的成語11-28

什么風什么雨的成語04-24

生什么死什么的成語10-12

南什么北什么的成語08-01

大什么小什么的成語10-12

豬什么狗什么的成語08-27

心什么意什么的成語08-15

里什么外什么的成語07-19

左什么右什么的成語大全09-27