C語言:使用指標操作二維陣列
阿新 • • 發佈:2019-02-08
任務程式碼:
(1)用指向二維陣列元素的指標:
#include <stdio.h>
int main( )
{
int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};
int *p;
for(p=a[0];p<a[0]+12;p++)
{
printf("%3d ",*p);
}
return 0;
}
(2)陣列指標:指向一維陣列的指標變數
#include <stdio.h> int main( ) { int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23}; int i,j,(*p)[4];//定義一個指向有四個元素的一維陣列的指標 for(p=a,i=0;i<3;i++,p++) //i用於計算行數 { for(j=0;j<4;j++) { printf("%3d ",*(*p+j));//!!尤其注意,這裡的p儲存的是a行整體的地址指向一維陣列a[0]整體,而不是指向一個具體的值! //*p的值取出來的值就是a[0][0]的地址,*p+j就是儲存a[0][j]行的地址, // *(*p+j)就是該地址指向的元素的值!! } printf("\n"); } return 0; }
第二種寫法:(含義不同)
#include <stdio.h> int main( ) { int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23}; int i,j,(*p)[4]; p=a[0];//p儲存a[0]行整體的地址,*p指向a[0]一維陣列整體 for(i=0;i<3;i++) //i用於計算行數 { for(j=0;j<4;j++) { printf("%3d ",*(*(p+i)+j));//p指向一維陣列整體,(p+i)代表指向每一行的一維陣列, //*(p+i)取值代表每一行一維陣列第a[i][0]個元素的地址 //*(p+i)+j代表每一行a[i][j]的地址 //*(*(p+i)+j)代表a[i][j]的值 } printf("\n"); } return 0; }
(3)指標陣列:
#include <stdio.h> int main( ) { int b[2][3]={{1,2,3},{2,4,6}}; int *pb[2]; int i,j; pb[0]=b[0];//pb[0]儲存b[0]行一維陣列首元素b[0][0]地址,*pb指向b[0]首元素 pb[1]=b[1];//pb[1]儲存b[1]行一維陣列首元素b[1][1]地址,*pb指向b[1]首元素 for(i=0;i<2;i++)//用於記錄行數 { for(j=0;j<3;j++,pb[i]++)//pb[i]++代表在b[i]行的基礎下,訪問b[i][j]元素的值 { printf("%2d ",*pb[i]); } } return 0; }
知識總結:
(1)用指向二維陣列元素的指標:
(2)陣列指標:指向一維陣列的指標變數!
陣列指標是一個指標,但是指向的不是一個元素,而是指向一維陣列整體!
例子1(第一種寫法):
例子2(第二種寫法):
(3)指標陣列:(注意區別與陣列指標的不同)
指標陣列去訪問二維陣列;