一、指標與陣列(一維)
a+k =
&a[k]
*(a+k)
= a[k]
如果將陣列的起始位址賦給某個指標變數,那麼該指標變數就是指向陣列的指標變數.
int a[10]
,*p=a;
(或*p=
&a[0
])
*(p+i)、*8(a+i)和p[i]就是陣列元素a[i]
p+i和a+i、&p[i]都是陣列a[i]的位址
p+1指向陣列的下乙個元素,而不是簡單地使指標變數p的值+1。其實際變化為p+1size(size為乙個元素占用的位元組數)。例如,假設指標變數p的當前值為2000,則p+1為2000+12=2002,而不是2001。
p[k]
= 』a』+k
相當於 *
(p+k)
= 』a』+k
*p++
= 』a』+k
相當於*p = 』a』+k;
p++;
二、多維陣列
1)二維陣列的行位址與列位址
1、一般指標變數
當二維陣列的首位址賦給指標變數p以後,則訪問某個元素a[i][j]可用以下幾種方式來代替:(p+in+j)、p[in+j]、(a[0]+i*n+j)
2、行指標變數
a[i][j]可用以下幾種方式來代替:
*
(a[i]
+j)、*(*
(a+i)
+j)、(
*(a+i)
)[j]
3、對於二維陣列int a[3][4],有
a -------------------- 二維陣列的首位址,即第0行的首位址
a+i ------------------ 第i行的首位址
a[i] 、(a+i)-----------第i行第0列的元素位址
a[i]+j、(a+i)+j --------第i行第j列的元素位址
*
(a[i]
+j)=*(
*(a+i)
+j)= a[i]
[j]
a+i = &a[i] = a[i] = (a+i) = &a[i][0],值相等,含義不同
a+i、&a[i],表示第i行首位址,指向行
a[i]、(a+i)、&a[i][0],表示第i行第0列元素位址,指向列
4、指標指向變數對二維陣列的引用
初始化:p=a;或p=&a[0];
a[i][j] 可用以下幾種方式來代替:
p[i]
[j],
*(p[i]
+j),*(
*(p+i)
+j),(*
(p+i)
)[j]
對指向二維陣列的指標變數進行賦值一般形式為:
(1) 二維陣列名+整型常數n,如:p = a + 1; 或
(2) &二維陣列名[整型常量n],如:p = &a[1]。
不可用陣列單元位址對其賦值。
如:p = a[0];或p = &a[0][0]都是錯誤的。
2) 通過二維陣列的行指標來訪問二維陣列
int a[2]
[3];
int(
*p)[3]
;(v)
int*p[3]
;(x)
int(
*p)[2]
;(x)
int (*p)[3]; //定義乙個陣列指標,該指標指向含3個元素的一維陣列(陣列中每個元素是int型)。
int *p[3]; //定義乙個指標陣列,該陣列中每個元素是乙個指標,每個指標指向**就需要程式中後續再定義了。
區分int *p[n]; 和int (*p)[n]; 就要看運算子的優先順序了。
int p[n]; 中,運算子[ ]優先順序高,先與p結合成為乙個陣列,再由int說明這是乙個整型指標陣列。
int (*p)[n]; 中( )優先順序高,首先說明p是乙個指標,指向乙個整型的一維陣列。
//指標陣列對鍵盤輸入的五個值用冒泡從小到大排序
intmain()
;//對a,b,c,d,e賦值
scanf (
"%d,%d,%d,%d,%d"
, p[0]
, p[1]
, p[2]
, p[3]
, p[4]
);for(i =
0; i <
4; i++
)//利用冒泡法排序
for(j = i +
1; j <
5; j++)if
(*p[i]
>
*p[j]
)//交換p[i]、p[j]所指向的變數值
for(i =
0; i <
5; i++
)//顯示排序後的結果
該方法是將a,b,c,d,e所對應的記憶體單元的值進行交換,而指標陣列並無變化
C語言指標學習 二
1.c語言中,實參變數與形參變數之間的資料傳遞,是單向的 值傳遞 方式。指標變數做函式引數也要遵循這一規則。呼叫函式不可能改變實參指標變數的值,但可以改變實參指標變數所指向變數的值。我們知道函式的呼叫可以得到乙個返回值,而運用指標變數做引數,可以得到多個變化了的變數值。2.在主調函式中宣告所要求的數...
C語言指標入門(二)
指標 1.指標是什麼?起什麼作用?指標是變數的一種,裡面是乙個位址,通過這個位址找到要找的資料 2.指標運算子 是取位址的運算子,是表示指標運算子 例 int p1,a p1 a p1 3 例題 include int main int p int a 3 p a printf d p 輸出結果 3...
C語言之指標二
函式指標 如果在程式定義了乙個函式,在編譯時,編譯系統為函式 分配一段儲存空間,這段儲存空間的起始位址,稱為這個函式的指標 函式名就是函式開始的位址 函式二級指標可以修改函式指標的指向 函式指標,不僅僅是位址,必須明確函式指標型別和輸出引數型別和數量 函式名可以作為引數傳遞給函式指標 include...