指標和陣列的關係

2021-09-12 10:14:41 字數 1240 閱讀 2244

陣列名是乙個指標常量,表示陣列第乙個元素的的起始位址。

如 int a[5];  a表示陣列第乙個元素a[0]的起始位址&a[0]。

一 引用陣列元素的方法

①用陣列下標引用陣列元素

陣列a中元素用下標表示為: 

a[0] a[1] a[2] a[3] a[4]

②用指標引用陣列元素

陣列a中元素用下標表示為:

int *p = a;  

*p, *(p+1), *(p+2), *(p+3), *(p+4)

二 陣列和指標的關係

①既然p是指向陣列第乙個元素起始位址的指標,可以用*(p+i)表示陣列中第i+1個元素,a也是指向陣列第乙個元素的指標啊,那麼能不能用*(a+i)表示第i+1個元素呢?

可以的,可以用printf 列印 *(a+i)的值驗證

②反過來,a是指向陣列第乙個元素起始位址的指標,可以用a加陣列下標引用陣列元素,如a[3],p也是指向陣列第乙個元素起始位址的指標,能不能用p加陣列下標引用陣列元素?

也是可以的,可以用printf 列印 p[0], p[1]....的值驗證

再然後通過*(a+i)得到第i個元素的內容。

再然後通過*(a+i)得到第i個元素的內容。

三 指向陣列的指標的自增

int a[5];

int *p = a; 

可以 ++p 遞增指標p指向下乙個陣列元素,然後用*p取得元素的值。

能不能用a++或者++a把指標指向下乙個陣列元素? 不能!!! 開頭就說過,陣列名是指向陣列首元素的指標常量。指標a是不可以指向其他元素的,只能指向首元素的起始位址。

四 陣列指標做形參

void output(char *p, int len);

int main()

void output(char *p, int len)

}如上,如果我們output函式不是用指標的方式char *p,而是用陣列的方式char p的話,有什麼不一樣?

我們定義的陣列str有65位元組,呼叫函式的話會傳遞這65位元組的陣列。

char *p指標大小是4位元組,只需要傳遞4位元組的資料就可以了,不止少傳遞資料,執行起來也更快了。

ps: 指標大小可以列印sizeof(int*),sizeof(char*)去驗證。

posted on 2019-01-10 14:11收藏

指標和陣列的關係

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

指標和陣列的關係

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 指標引用 ...

指標和陣列的關係

指標與陣列的天生姻緣 以指標方式來訪問陣列元素 1 陣列元素使用時不能整體訪問,只能單個訪問。訪問方式有2種 陣列形式和指標形式。2 陣列格式訪問陣列元素是,陣列名 下標 注意下標從0開始 3 指標格式訪問陣列元素是 指標 偏移量 如果指標是陣列首元素位址 a或者 a 0 那麼偏移量就是下標 指標也...