C语言的行指针和列指针
一、定義二維數(shù)組
<1>定義方式
數(shù)據(jù)類型 數(shù)組名[行數(shù)][列數(shù)];
例如:
int a[3][4]; =====>3行4列
C語言對(duì)二維數(shù)組采用的這種特殊的定義方式,使得二維數(shù)組可以被看作一種特殊的一維數(shù)組:它的元素又是一個(gè)一維數(shù)組。例如:
上圖中的a可以看出是一個(gè)一維數(shù)組,他有3個(gè)元素:
a[0],a[1],a[2].
每個(gè)元素又包含四個(gè)一維數(shù)組。
a[0]----------->a[0][0] a[0][1] a[0][2] a[0][3]
a[1]----------->a[1][0] a[1][1] a[1][2] a[1][3]
a[2]----------->a[2][0] a[2][1] a[2][2] a[2][3]
這里的a[0],a[1],a[2]我們把它叫做列指針。它指向了第一個(gè)元素的地址。
我曾經(jīng)說過,一維數(shù)組的數(shù)組名就就數(shù)組首元素的首地址。
因此,這里我們
a[0]就指向了a[0][0]的首地址。
a[1]就指向了a[1][0]的首地址。
a[2]就指向了a[2][0]的首地址。
a[0] =======>&a[0][0]
a[1] =======>&a[1][0]
a[2] =======>&a[2][0]
注:a[0][0] 為一個(gè)int類型的數(shù)據(jù),故我們的a[0]要用一個(gè)int *類型的指針來保存。
因此,列指針是一個(gè)一級(jí)指針類型。
以上的分析是針對(duì)我們的a[0],a[1],a[2]中子元素來分析。下面,我們來對(duì)我們的
二維數(shù)組的首元素a來說。它擁有三個(gè)元素a[0],a[1],a[2]。
我們可以用以下方式來訪問者三個(gè)變量。
a >&a[0]
a + 1=>&a[1]
a + 2 ======>&a[2]
這里的a[0],a[1],a[2]都是指針常量,我們對(duì)常量取地址的話,相當(dāng)與對(duì)整個(gè)數(shù)組的取大小。
故a是一個(gè)數(shù)組指針類型。這里的a,我們叫做行指針。
結(jié)論:行指針是一個(gè)數(shù)組指針類型。
下面我們來說說二維數(shù)組的特點(diǎn):
(1)數(shù)組名標(biāo)示數(shù)組的首地址
(2)二維數(shù)組的數(shù)組名是數(shù)組指針類型
(3)二維數(shù)組按行優(yōu)先存放
綜上所述,我們有了一個(gè)結(jié)論:
行指針類型:a , a + 1,a + 2----->加 + 1,移動(dòng)一行元素的大小,它實(shí)質(zhì)是一個(gè)數(shù)組
指針的類型。例如:int (*p)[2]
列指針類型:a[0],a[1],a[2] ->加1移動(dòng)一個(gè)數(shù)據(jù)元素的大小,它實(shí)質(zhì)是一個(gè)一維指針的類型。
例如:int *p;
行列指針變換的特點(diǎn):
行指針 + *》列指針
a >&a[0] *a <>*(&a[0]) <=>a[0]
a + 1===>&a[1] *(a + 1) <=> *(&a[1] )<=> a[1]
a + 2 >&a[2] *(a + 2) <=> *(&a[2]) <=======>a[2]
列指針 + &========》行指針
&a[0] ============>a
&a[1] >a + 1
&a[2]>a + 2
思考:
int a[3][2];
a[1][1]這個(gè)元素的幾種表示方式?
*(*a + 1 * 2 + 1) , *(a[1] + 1) , ((a + 1) + 1), *(&a[1][1])
總結(jié)
以上是生活随笔為你收集整理的C语言的行指针和列指针的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 硬盘数据恢复
- 下一篇: 【河马】oracle注入工具v1.1,明