C语⾔的⾏指针和列指针
⼀、定义⼆维数组
<1>定义⽅式
数据类型 数组名[⾏数][列数];
例如:
int a[3][4]; =====>3⾏4列
C语⾔对⼆维数组采⽤的这种特殊的定义⽅式,使得⼆维数组可以被看作⼀种特殊的⼀维数组:它的元素⼜是⼀个⼀维数组。例如:上图中的a可以看出是⼀个⼀维数组,他有3个元素:
a[0],a[1],a[2].
每个元素⼜包含四个⼀维数组。
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]我们把它叫做列指针。它指向了第⼀个元素的地址。
我曾经说过,⼀维数组的数组名就就数组⾸元素的⾸地址。
因此,这⾥我们
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] 为⼀个int类型的数据,故我们的a[0]要⽤⼀个int *类型的指针来保存。
因此,列指针是⼀个⼀级指针类型。
以上的分析是针对我们的a[0],a[1],a[2]中⼦元素来分析。下⾯,我们来对我们的
⼆维数组的⾸元素a来说。它拥有三个元素a[0],a[1],a[2]。
我们可以⽤以下⽅式来访问者三个变量。
a >&a[0]
a + 1=>&a[1]
a + 2 ======>&a[2]
这⾥的a[0],a[1],a[2]都是指针常量,我们对常量取地址的话,相当与对整个数组的取⼤⼩。
故a是⼀个数组指针类型。这⾥的a,我们叫做⾏指针。
结论:⾏指针是⼀个数组指针类型。
下⾯我们来说说⼆维数组的特点:
(1)数组名标⽰数组的⾸地址
(2)⼆维数组的数组名是数组指针类型
(3)⼆维数组按⾏优先存放
综上所述,我们有了⼀个结论:
⾏指针类型:a , a + 1,a + 2----->加 + 1,移动⼀⾏元素的⼤⼩,它实质是⼀个数组
指针的类型。例如:int (*p)[2]
列指针类型:a[0],a[1],a[2] ->加1移动⼀个数据元素的⼤⼩,它实质是⼀个⼀维指针的类型。
例如:int *p;
⾏列指针变换的特点:
⾏指针 + *》列指针
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]这个元素的⼏种表⽰⽅式?
*(*a + 1 * 2 + 1) , *(a[1] + 1) , ((a + 1) + 1), *(&a[1][1])

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。