陣列名是乙個指標常量,表示陣列第乙個元素的的起始位址。
如 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 那麼偏移量就是下標 指標也...