在c語言中可將乙個二維陣列看成是由若干一維陣列構成的。如:
int a[3][4];
首先,可將二維陣列a看成是由a[0],a[1],a[2]三個元素組成的一維陣列,a是該一維陣列的陣列名,代表該一維陣列的首位址,即第乙個元素a[0]的位址(&a[0])。所以*(a+i)
即為a[i]
,注意這裡所謂的元素a[0],a[1],a[2]事實上仍然是個位址。
其次,可以將a[0],a[1],a[2]分別看成是由4個int型元素組成的一維陣列元素的陣列名,如a[0]就可以看成由元素a[0][0]
,a[0][1]
,a[0][2]
,a[0][3]
,這4個整型元素組成的一維陣列。a[0]就是這個一維陣列的陣列名,它代表該一維陣列的首位址,即第乙個元素a[0][0]
的位址(&a[0][0]
),則a[0]+i表示a[0][i
的位址(&a[0][i]
)。因此*(a[0]+i)
即為a[0][i
。同時,a[i]即*(a+i)
可以看成一維陣列a的下標為i的元素。根據以上分析可知a[i]+j及*(a+i)+j
代表這個陣列中下標為j的元素位址,即&a[i][j]
,*(a[i]+j)
即*(*(a+i)+j)
就代表這個位址所指向的元素的值,即a[i][j]
。因此,以下4種表示元素a[i][j]
的形式是等價的:
a[i][j]
*(a[i]+j)
*(*(a+i)+j)
(*(a+i))[j]
行指標:使用二維陣列的行位址進行初始化。
一般格式:型別關鍵字 (*行指標名)[常量n];
其中,常量n定義行指標所指一維陣列的長度。
通過行指標p引用二維陣列的方法可以有以下4種形式:
p[i][j]
*(p[i]+j)
*(*(p+i)+j)
(*(p+i))[j]
例如:
# include int main(void)
; int i, j;
int (*p)[4] = a; //行指標初始化格式
for (i=0; i<3; ++i)
printf("\n");
}return 0;
}
輸出結果:
1 2 3 4
5 6 7 8
9 10 11 12
列指標:使用二維陣列的列位址進行初始化。
定義列指標p後,為了能通過p引用二維陣列元素a[i][j]
,可將陣列a看成乙個由m行*
n列個元素組成的一維陣列。因此,p+i*n+j
代表陣列的第i行第j列的位址,即&a[i][j]
,於是,通過列指標p引用二維陣列a[i][j]
的方法可以有以下兩種形式:
*(p+i*n+j)
p[i*n+j]
例如:
# include int main(void)
; int i, j;
int *p = &a[0][0]; //列指標初始化格式,把a[0][0]的位址賦給指標變數p
for (i=0; i<3; ++i)
printf("\n");
}return 0;
}
輸出結果:
1 2 3 4
5 6 7 8
9 10 11 12
c語言學習之指標與二維陣列
二維陣列,陣列名為第陣列第乙個元素的位址即a為 a 0 0 第一行的行名 為一維陣列a 1 也為第乙個元素位址,同理第二行的行名為第二個行第乙個元素的位址即a 0 為 a 0 0 a 2 為 a 2 0 綜上即a a 0 a 0 0 a 2 a 2 0 陣列名加一為行數加一即a 1為第二行即a 1 ...
C語言學習筆記 指標 指標與一維陣列
int a 10 int p null p a 其中,陣列名a代表陣列的首位址 即 a 0 那麼表示式a i代表陣列中下標為i元素a i 的位址,即 a i 還可以通過使用間接定址 來引用陣列元素。例如 a i 表示取出首位址元素後邊第i個元素的內容,即下標為i的元素a i 此外,還可以通過一維陣列...
C語言指標與二維陣列
includeint main int p 3 null p array p is same as array,the use of p is same as array.so p is the two devision pointer same as array int p1 array 0 0 ...