程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C語言基礎教程(四)指針、結構、聯合和枚舉(6)

C語言基礎教程(四)指針、結構、聯合和枚舉(6)

編輯:關於C語言
2.2.2 指向一個由n個元素所組成的數組指針
在Turbo C中, 可定義如下的指針變量:
int (*p)[3];
指針p為指向一個由3個元素所組成的整型數組指針。在定義中,圓括號是不能少的,否則它是指針數組,這將在後面介紹。這種數組的指針不同於前面介紹的整型指針,當整型指針指向一個整型數組的元素時,進行指針(地址)加1運算,表示指向數組的下一個元素, 此時地址值增加了2(因為放大因子為2),而如上所定義的指向一個由3個元素組成的數組指針,進行地址加1運算時,其地址值增加
了6(放大因子為2x3=6),這種數組指針在Turbo C中用得較少,但在處理二維數組時,還是很方便的。例如:
int a[3][4], (*p)[4];
p=a;
開始時p指向二維數組第0行,當進行p+1運算時,根據地址運算規則,此時放大因子為4x2=8,所以此時正好指向二維數組的第1行。和二維數組元素地址計算的規則一樣,*p+1指向a[0][1],*(p+i)+j則指向數組元素a[i][j]。
例1
int a[3] [4]={
{1,3,5,7},
{9,11,13,15},
{17,19,21,23}
};
main()
{
int i,(*b)[4];
b=a+1; /* b指向二維數組的第1行, 此時*b[0]或
**b是a[1][0] */
for(i=1;i<=4;b=b[0]+2,i++)/* 修改b的指向, 每次增加2 */
printf("%d\t",*b[0]);
printf("\n");
for (i=0; i<2; i++) {
b=a+i; /* 修改b的指向, 每次跳過二維數組的
一行 */
printf("%d\t",*(b[i]+1));
}
printf ("\n");
}
程序運行結果如下:
9 13 17 21
3 11 19
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved