指標和陣列的關係

2022-05-06 04:33:11 字數 1158 閱讀 2734

指標與陣列的天生姻緣

以指標方式來訪問陣列元素

(1)陣列元素使用時不能整體訪問,只能單個訪問。訪問方式有2種:陣列形式和指標形式。

(2)陣列格式訪問陣列元素是,陣列名[下標]; (注意下標從0開始)

(3)指標格式訪問陣列元素是:*(指標+偏移量);

如果指標是陣列首元素位址( a或者&a[0]), 那麼偏移量就是下標:指標也可以不是首元素位址而是其他哪個元素的位址,這時候偏移星就要考慮疊加了。

(4)陣列下標方式和指標方式均可以訪問陣列元素,兩者的實質具實是一樣的。在編譯器內部都是用指標方式來訪問陣列元素的,陣列下標方式只是編譯器提供給程式設計者種殼 (語法糖)而已。所以用指標方式來訪問陣列才是本質的做法。

從記憶體角度理解指標訪問陣列的實質

(1)陣列的特點就是:陣列中各個元素的位址是依次相連的,而且陣列還有乙個很大的特點(其實也是陣列的乙個限制)就是陣列中各個元素的型別必須相同。型別相同就決定了每個陣列元佔幾個位元組是相同的(譬如int陣列每個元素都佔4位元組,沒有例外)。

(2)陣列中的元素其實就是位址相連線、占地大小相同的一串記憶體空間。這兩個特點就決定了只要知道陣列中乙個元素的位址,就可以很容易推算出具他元素的位址。

指標和陣列型別的匹配問題

(1)int *p;  int a[5];  p=a;  //型別匹配

int *p;  int a[5];  p=&a;  //型別不匹配。p是int*, &a是整個陣列的指標,也就是乙個陣列指標型別,不是int指標型別,所以不匹配

(2)&a、a、&a[0] 從數值上來看是完全相等的,但是意義來看就不同了。從意義上來看,a和&a[0]是陣列首元素首位址,而&a是整個陣列的首位址;從型別來看,a和&a[0]是元素的指標,也就是int *型別,而&a是陣列指標,是int (*) [5] ;型別。

總結:指標型別決定了指標如何參與運算

(1)指標參與運算時,因為指標變數本身儲存的數值是表示位址的,所以運算也是位址的運算。

(2)指標參與運算的特點是,指標變數+1, 並不是真的加1,而是加1*sizeof (指標型別);如果是int *指標,則+1就實際表示位址+4,如果是char *指標,則+1就表示位址+1;如果是double*指標,則+1就表示位址+8.

(2)指標變數+1時實際不是加1而是加1*sizeof (指標型別),主要原因是希望指標+1後剛好指向下乙個元素(而不希望錯位)。

指標和陣列的關係

指標和陣列的關係 參考朱有鵬c語言大講堂 1 指標和陣列的型別匹配的問題 int p int a 5 p a 型別的匹配的問題 p a a和a的數值是一樣的,但是 a時表示整個陣列的大小的 位址的列印是一樣的。a a a 0 從數值上看是完全一樣的,從意義上面看,a和 a是整個陣列的首位址,從型別來...

指標和陣列的關係

陣列名是乙個指標常量,表示陣列第乙個元素的的起始位址。如 int a 5 a表示陣列第乙個元素a 0 的起始位址 a 0 一 引用陣列元素的方法 用陣列下標引用陣列元素 陣列a中元素用下標表示為 a 0 a 1 a 2 a 3 a 4 用指標引用陣列元素 陣列a中元素用下標表示為 int p a p...

指標和陣列的關係

include include int a 20 int sum int pa,int n,int p return ans int main 陣列引用 include include intmain for i 0 i 5 i printf d a i printf n return0 指標引用 ...