日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
C#數(shù)組和指針全面討論

C#有很多值得學(xué)習(xí)的地方,這里我們主要介紹C#數(shù)組和C#指針,包括介紹為什么C#語言把數(shù)組形參當(dāng)作指針等方面。

什么時候C#數(shù)組和C#指針相同

所有作為函數(shù)參數(shù)的數(shù)組名總是可以通過編譯器轉(zhuǎn)換為指針。在其他所有情況下,數(shù)組的聲明就是數(shù)組,指針的聲明就是指針,兩者不能混淆。但在語句或表達(dá)式中引用時,數(shù)組總是可以寫成指針的形式,兩者可以互換。然而,C#數(shù)組和C#指針在編譯器處理時是不同的,在運(yùn)行時的表示形式也是不一樣的。對編譯器而言,一個數(shù)組就是一個地址,一個指針就是一個地址的地址,你應(yīng)該根據(jù)情況做出選擇。

為什么會發(fā)生混淆

當(dāng)人們學(xué)習(xí)編程時,一開始總是把所有的代碼都放到一個函數(shù)里。隨著水平的進(jìn)步,他們把代碼分別放在幾個函數(shù)中。在水平繼續(xù)提高后,他們最終學(xué)會了如何用幾個文件來構(gòu)造一個程序。

什么時候C#數(shù)組和C#指針是相同的?C#語言標(biāo)準(zhǔn)對此作了如下說明:
規(guī)則1 表達(dá)式中的數(shù)組名(與聲明不同)被編譯器當(dāng)作一個指向該數(shù)組***個元素的指針。
規(guī)則2 下標(biāo)總是與指針的偏移量相同。
規(guī)則3 在函數(shù)參數(shù)的聲明中,數(shù)組名被編譯器當(dāng)作指向該數(shù)組的***個元素的指針。

規(guī)則1:“表達(dá)式中的數(shù)組名”就是指針

規(guī)則1和2合在一起理解,就是對數(shù)組下標(biāo)的引用總是可以寫成“一個指向數(shù)組的起始地址的指針加上偏移量?!保▊€人認(rèn)為,表述為“一個指向該數(shù)組***個元素的指針加上偏移量”更明確。)

對數(shù)組的引用如a[i]在編譯時總是被編譯器改寫成*(a+i)的形式。C#語言標(biāo)準(zhǔn)要求編譯器必須具備這個概念性的行為。于是,a[6]和6[a]都是正確的。

編譯器自動把下標(biāo)值的步長調(diào)整到數(shù)組元素的大小。這就是為什么指針總是有類型限制,每個指針只能指向一種類型的原因,因為編譯器需要知道對指針進(jìn)行解除引用操作時應(yīng)取幾個字節(jié),以及每個下標(biāo)的步長應(yīng)取幾個字節(jié)。

規(guī)則2:C#語言把數(shù)組下標(biāo)作為指針的偏移量

事實(shí)上,下標(biāo)范圍檢測被認(rèn)為并不值得加入到C#語言中。數(shù)組下標(biāo)是定義在指針的基礎(chǔ)上的,所以優(yōu)化器常??梢园阉D(zhuǎn)換為更有效率的指針表達(dá)式,并生成相同的機(jī)器指令。C#語言把數(shù)組下標(biāo)改寫成指針偏移量的根本原因是指針和偏移量是底層硬件所使用的基本模型。

為什么C#語言把數(shù)組形參當(dāng)作指針

之所以要把傳遞給函數(shù)的數(shù)組參數(shù)轉(zhuǎn)換為指針是出于效率的考慮,這個理由常常也是對違反軟件工程做法的辯解。我們傾向于始終把參數(shù)定義為指針,因為這是編譯器內(nèi)部所使用的形式。以上介紹C#數(shù)組和C#指針。


當(dāng)前文章:C#數(shù)組和指針全面討論
當(dāng)前鏈接:http://www.dlmjj.cn/article/cosdjio.html