c语言指针索引数组,C语言数组指针表示法
指針在處理數組時很有用,我們可以用指針指向已有的數組,也可以從堆上分配內存然后把這塊內存當做一個數組使用。數組表示法和指針表示法在某種意義上可以互換。不過,它們并不完全相同,后面的“數組和指針的差別”中會詳細說明。
單獨使用數組名字時會返回數組地址。我們可以把地址賦給指針,如下所示:
pv變量是指向數組第一個元素而不是指向數組本身的指針。給pv賦值是把數組的第一個元素的地址賦給pv。
我們可以只用數組名字,也可以對數組的第一個元素用取地址操作符,如下所示。這些寫法是等價的,都會返回vector的地址。用取地址操作符更繁瑣一些,不過也更明確。
有時候也會使用&vector這個表達式獲取數組的地址,不同于其他表示法,這么做返回的是整個數組的指針,其他兩種方法得到是整數指針。這種類型的用法會在4.8節解釋。
我們可以把數組下標用在指針上,實際上,pv[i]這種表示法等價于:
pv指針包含一個內存塊的地址,方括號表示法會取出pv中包含的地址,用指針算術運算把索引i加上,然后解引新地址返回其內容。
就像我們在1.3.1節中討論的那樣,給指針加上一個整數會把它持有的地址增加這個整數和數據類型長度的乘積,這一點對于給數組名字加上整數也適用。下面兩個語句是等價的:
假設vector位于地址100,pv位于地址96,表4-1和圖4-4說明了如何利用數組下標和指針算術運算分別從數組名字和指針得到不同的值。
值
等價表達式
92
&vector[-2]
vector - 2
&pv[-2]
pv - 2
100
vector
vector+0
&pv[0]
pv
100
&vector[0]
vector+0
&pv[0]
pv
104
&vector[1]
vector + 1
&pv[1]
pv + 1
140
&vector[10]
vector + 10
&pv[10]
pv + 10
給數組地址加1實際加了4,也就是整數的長度,因為這是一個整數數組。對于第一個和最后一個操作,我們越過了數組邊界,這不是好習慣,不過也提醒我們在用索引和指針訪問數組元素時要謹慎。
數組表示法可以理解為“偏移并解引”操作。vector[2]表達式表示從vector開始,向右偏移兩個位置,然后解引那個位置獲取其值,其中vector是指向數組起始位置的指針。如果用取地址操作符和數組表示法,就像&vector[-2],其實就是去掉了解引操作,可以解釋為向右偏移兩個位置然后返回地址。
下面的代碼說明了標量相加操作的實現中指針的使用。這個操作接受一個值然后給vector的每個元素乘上這個值:
總結
以上是生活随笔為你收集整理的c语言指针索引数组,C语言数组指针表示法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言程序出现错误,C语言程序错误,不能
- 下一篇: c2000 汇编语言指令,C2000系C