1. 程式人生 > >C語言程式設計-指標遍歷二維陣列

C語言程式設計-指標遍歷二維陣列

筆記:
一:操作方法
①a[1][2]地址為:a[1]+2,*(a+1)+2 ((a+1)第二行地址,*(a+1)+2第二行第一列地址),&a[1][2]
②a[1][2]值為:*(a[1]+2),*(*(a+1)+2),a[1][2]
③*(行地址)→列地址;*(列地址)→某行某列的值
二:指標與二維陣列概要
①二維陣列有行地址(行指標)和列地址(列指標)。
②二維陣列的名字為第一行地址,二維陣列名字加上n為n+1行地址。
③二維陣列的每一行地址和每一行第一列地址本身的值一樣,但概念不同。
④通過行地址(行指標)和列地址(列指標)均可遍歷二維陣列
⑤指標運算子(*)加上行地址可獲得列地址;(&)加上第一列地址可以獲得當前行地址;指標運算子(*)加上列地址可獲得列地址中的元素值。
  #include <stdio.h>
void out1(int a[][4],int size); void out2(int *p,int size); void out3(int (*p)[4],int row,int col);//行數不用標明,列數必須標明 int main(void) { int a[][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; out1(a,12);//陣列a首地址 printf("\n************************\n"); out2(*a,12); printf("\n************************\n"
); int (*p)[4]; p=a; out3(a,3,4); printf("************************\n"); out3(p,3,4); printf("************************\n"); return 0; } //列指標遍歷1 void out1(int a[][4],int size) { int *p; //p為指向某行某列元素的指標 /*p為陣列第一行第一列元素的地址*/ for(p=a[0];p<a[0]+size;p++) { if
((p-a[0])%4==0)//每遍歷4個元素換行 printf("\n"); printf("%5d",*p);//*地址為該地址裡的值 } } //列指標遍歷2 void out2(int *p,int size) { int *s;//另定義一個指標s for(s=p;s<p+size;s++) { if((s-p)%4==0) printf("\n"); printf("%5d",*s); } } //行指標遍歷 /*p為陣列指標(行指標) 指向的是行*/ /*第一個形參為一維陣列*/ void out3(int (*p)[4],int row,int col) { int i,j; for(i=0;i<row;i++) { for(j=0;j<col;j++) { printf("%5d",*(*(p+i)+j)); /* p是第1列地址,p+i就是第i行的地址 *(p+i)就是第i行第一列的地址 *(p+i)+j就是第i行第i列的地址 *(*(p+i)+j)就是第i行第j列地址裡的內容 */ } printf("\n"); } }