指向二維數組元素的指針變量
阿新 • • 發佈:2017-08-17
數據 指針 數組的指針 定義 輸入 alt == turn urn
(1)指向數組元素的指針變量
例1.有一個3X4的二維數組,要求用指向元素的指針變量輸出二維數組各元素的值.
編寫程序
1 #include <stdio.h> 2 int main() 3 { 4 int a[3][4] = { 1,3,5,7,9,11,13,15,17,19,21,23 }; 5 int *p; 6 for (p = a[0]; p < a[0] + 12; p++) //a[0]代表列指針的起點,p依次指向下一個元素 7 { 8 if ((p - a[0])%4 == 0) 9 {10 printf("\n"); //%4 ==0,先換行再輸出元素 11 } 12 printf("%4d ", *p); 13 14 } 15 return 0; 16 }
本例是順序輸出數組中各元素之值.若要輸出指定的某個數值元素(如a[2][3]),可以通過相對位置來計算.a[i][j]在數組中的相對位置的計算公式為i*m+j.所以a[2][3]的地址是(p+2*4+3),即(p+11).
(2)指向由m個元素組成的一維數組的指針變量
上例中p是int * p,指向整形數據,p+1所指元素是p所指列元素的下一個元素.
可以改用另一種方法,使p指向一個包含m個元素的一維數組.這時,如果p先指向a[0](即p=&a[0]),則p+1指向a[1],p的增值以一維數組的長度為單位.如下圖
例2. 輸出二維數組任一行任一列元素的值.
1 #include <stdio.h> 2 int main() 3 { 4 int a[3][4] = { 1,3,5,7,9,11,13,15,17,19,21,23 }; 5 int(*p)[4], i, j; 6 p = a; //p指向二維數組的0行 7 printf("please enter row and colum:"); 8 scanf_s("%d,%d", &i, &j); //2個%d之間的分隔符要和輸入時的保持一致 9 printf("a[%d][%d] = %d",i, j, *(*(p + i) + j)); 10 return 0; 11 }
程序分析:程序第5行中的int(*p)[4]表示定義p為一個指針變量,它指向包含4個整型元素的一維數組.註意*p兩側的括號不可缺少,如寫成*p[4],則代表指針數組.
對(*p)[4]的理解,可以做出下面的比較:
①int a[4];(a有4個元素,每個元素為整型)
②int (*p)[4]
第②種形式表示 (*p)有4個元素,每個元素為整型.也就是p所指向的對象是有4個整型元素的數組,即p是指向一維數組的指針.p的值是該一維數組的起始地址.
註意p的類型是int (*)[4],p指向的一維數組的長度是16字節,所以p每增加1,地址就增加16字節.
指向二維數組元素的指針變量