32 通過指針引用數(shù)組

點(diǎn)擊藍(lán)字
關(guān)注我們
DRAGON BOAT FESTIVAL
01 數(shù)組元素的指針
指針變量既可以指向變量,也可以指向數(shù)組元素。所謂數(shù)組元素的指針就是數(shù)組元素的地址。
引用數(shù)組元素可以用下標(biāo)法,也可以用指針法,即通過指向數(shù)組元素的指針找到所需的元素。
使用指針法能使目標(biāo)程序質(zhì)量高(占內(nèi)存少,運(yùn)行速度快)。
在C語言中,數(shù)組名(不包括形參數(shù)組名,形參數(shù)組并不占據(jù)實(shí)際的內(nèi)存單元)代表數(shù)組中首元素的地址。
02 在引用數(shù)組元素時(shí)指針的運(yùn)算
在一定條件下允許對(duì)指針進(jìn)行加和減的運(yùn)算。
當(dāng)指針指向數(shù)組元素時(shí),譬如,指針變量p指向數(shù)組元素a[0],我們希望用p+1表示指向下一個(gè)元素a[1]。
在指針指向數(shù)組元素時(shí),可以對(duì)指針進(jìn)行以下運(yùn)算:
(1)加一個(gè)整數(shù),如p+1。
(2)減一個(gè)整數(shù),如p-1。
(3)自加運(yùn)算,如p++,++p。
(4)自減運(yùn)算,如p--,--p。
(5)兩個(gè)指針相減,如p1-p2(只有p1和p2都指向同一數(shù)組中的元素時(shí)才有意義)。
在 C 語言中,指針變量加 1 表示跳過該指針變量對(duì)應(yīng)的基類型所占字節(jié)數(shù)大小的空間。指向數(shù)組元素的指針,其基類型為數(shù)組元素類型,指針加 1 表示跳過一個(gè)數(shù)組元素空間,指向下一個(gè)數(shù)組元素。
例如:
int *p,a[10];p=a; //相當(dāng)于 p=&a[0];
說明:數(shù)組名 a 相當(dāng)于數(shù)組首元素 a[0] 的地址,即 a 等價(jià)于 &a[0]。
上述語句定義了整型指針變量 p 和整型數(shù)組 a,并使 p 初始指向數(shù)組首元素 a[0]。
03 通過指針引用數(shù)組元素
當(dāng)指針變量和數(shù)組元素建立聯(lián)系后,可通過以下方式訪問數(shù)組元素。
1. 間接訪問:*(數(shù)組名+i); 的形式。其中,i 為整數(shù),其范圍為:0<i<N,N 為數(shù)組大小。數(shù)組名 a 為首元素的地址,是地址常量,a+i 表示跳過 i 個(gè)數(shù)據(jù)元素的存儲(chǔ)空間,即(a+i)表示 a[i] 元素的地址,從而 *(a+i) 表示 a[i]。
如果指針變量 p 被初始化為 a 之后,不再改變,那么也可以使用 *(p + i) 的形式訪問 a[i],不過這樣就失去了使用指針變量訪問數(shù)組元素的意義。
2.間接訪問:*(指針變量);的形式。當(dāng)執(zhí)行語句 p=a; 后,可以通過改變 p 自身的值(可通過自增、自減運(yùn)算),從而使得 p 中保存不同的數(shù)組元素的地址,進(jìn)而通過 *p 訪問該數(shù)組中不同的元素。這是使用指針訪問數(shù)組元素較常用的形式。例如,如下代碼通過使用指針變量的移動(dòng)來遍歷輸出數(shù)組中的每個(gè)元素。
for (p=a;p<a+N;p++) //用p的移動(dòng)范圍控制循環(huán)次數(shù)printf ("%d\t",*p);
確定 p 指針移動(dòng)的起止地址,即循環(huán)控制表達(dá)式的確定是使用指針訪問數(shù)組元素的關(guān)鍵。
p 初始指向 a[0],即 p=&a[0]; 或 p=a;。
p 終止指向 a[N-1],即 p=&a[N-l]; 或 p=a+N-1;。
故可得 p 的移動(dòng)范圍為:p>=a && p<=a+N-1;,而 p<=a+N-1 通常寫成 p<a+N;,由此可得循環(huán)條件為:for (p=a;p<a+N;p++)。
04 用數(shù)組名作函數(shù)參數(shù)
C語言調(diào)用函數(shù)時(shí)虛實(shí)結(jié)合的方法都是采用“值傳遞”方式,當(dāng)用變量名作為函數(shù)參數(shù)時(shí)傳遞的是變量的值,當(dāng)用數(shù)組名作為函數(shù)參數(shù)時(shí)。
由于數(shù)組名代表的是數(shù)組元素地址,因此傳遞的值是地址,所以要去形參為指針變量。
實(shí)參數(shù)組名代表一個(gè)固定的地址,或者說是指針變量,但形參數(shù)組名并不是一個(gè)固定的地址,而是按指針變量處理。
05 通過指針引用多維數(shù)組
多維數(shù)組元素的地址
(1)性質(zhì)與二維數(shù)組差不多,但需要注意的是,多維數(shù)組由于分配內(nèi)存情況不同,所顯示的地址可能是不同的。
指向多維數(shù)組元素的指針變量
(1)指向數(shù)組元素的指針變量。
(2)指向由m個(gè)元素組成的一維數(shù)組的指針變量。
用指向數(shù)組的指針作函數(shù)參數(shù)
(1)一維數(shù)組名可以作為函數(shù)參數(shù),多維數(shù)組名也可以作函數(shù)參數(shù)。
(2)用指針變量作形參,以接收實(shí)參數(shù)組名傳遞來的地址,有兩個(gè)方法:
①用指向變量的指針變量。
②用指向一維數(shù)組的指針變量。

球分享

球點(diǎn)贊

球在看
