1)
通常情況下,定義乙個陣列,int a[5]=;定義乙個指標,int *p=a;
a與p都表示&a[0];而&a表示的位址與a和p在數值上一樣;但a和
p都表示四位元組記憶體塊的位址;而&a表示整個陣列的位址,有20個位元組;
p+1將位址值加4,而&a+1卻將位址值加20.
那麼關於&a如何定義呢?
即陣列指標
int (*p)[5]=&a;//注意括號不可少;否則根據運算子優先順序順序,p會先於[5]結合,成為乙個指標陣列。
2)關於常指標與指向常量的指標
(1)常量
int a=1,b=2;const int * p=&a;//對於這種宣告方式,使得 * p的值恒為1,不能通過為* p賦值的方法來改變a的值,即*p=5;這一賦值語句是錯誤的;但是任然可以通過為a賦值的方式來改變a的值,即a=5;這一語句正確;而對於指標p本身的值也是可以改變的,可以再把b的位址賦給p;p=&b;
對於乙個常量 const int a=3;此時a的位址只能賦給指向常量的指標。即const int *p=&a;語句正確,
而int *p=&a;錯誤。
(2)常指標
int a=1,b=2;
int *const p=&a;//此時指標p的值不能被改變,即p=&b;編譯器會報錯。
(3)特殊情況:
int a=1;int *p=&a;const int *q=p;這樣寫編譯器不會報錯,可以將p的值賦值q;
可以給*p賦值
不能給*q賦值。
此種語句也是錯誤的。
一維陣列,二維陣列與指標
陣列與指標間的三條規則 陣列名是指向陣列首元素的指標。e相當於給e公升了一階。int a 4 a 0 本身是乙個值,a 0 是乙個位址,公升階大概就是這個意思 e相當於給e降了一階。降階相當於把乙個指標降為值,a 0 是乙個位址,a 0 就成為了值 以上內容來自北京大學 c程式設計高階 一維陣列與指...
指標與一維 二維陣列
示例程式 includevoid main int i,j 用陣列名做指標輸出資料 第一種方式 printf s n m 第二種方式 for i 0 m i 0 i printf c m i 注意點1 printf n 通過定義指標型變數輸出 char p m 將陣列首位址賦給指標變數p 第一種方式...
指標陣列與陣列指標 從一維到二維
這是乙個很容易混淆的概念 int p1 5 int p2 5 第乙個就是乙個指標陣列 的優先順序比 高,所以p1會先於 結合,成為陣列,再和指標結合,成為陣列指標,也就是陣列中每乙個元素都是乙個指標 指標陣列是陣列,即 乙個陣列中,每個元素都是指標。第二個就是乙個陣列指標 的優先順序比 高,所以 p...