c语⾔列指针的形式,⾏指针和列指针-专题分析(转⾄汪⽼师的
C语⾔)
指针与多维数组
(主要指⼆维数组)
int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};
换个⾓度看世界:
如⾸⾏⼀样,将⾸⾏视为⼀个元素,⼀个特殊的元素,这个“特殊的”元素是⼀个⼀维数组。那么这个⼆维数组是由是由三个“特殊的”元素组成的⼀个“特殊的”⼀维数组。
a是这个“特殊的”⼀维数组的名称,也就是⾸地址,也就是第⼀个元素的地址,也就是第⼀⾏的⾸地址,是指⾸⾏⼀整⾏,并不是指某个具体元素。那么我们称之为“⾏指针”。同理:a+0,a+1,a+2,都是⾏指针。
结论:
表⽰形式
含义
指针类型
a或者a+0
指向第0⾏
⾏指针
a+1
指向第1⾏
⾏指针
a+2
指向第2⾏
⾏指针指针与二维数组
接下来,我们来放⼤观看⾸⾏,⾸⾏的元素分别是:a[0][0],a[0][1],a[0][2],a[0][3]。将其看作⼀个独⽴的⼀维数组,
那么
a[0]就是这个数组的名称,也就是这个数组的⾸地址,也就是第⼀个元素的地址,也就是a[0]+0。a[0]和a[0]+0都是指具体的元素,那么我们
称之为“列指针”。
结论:(第0⾏视为⼀维数组)
表⽰形式
含义
指针类型
a[0]
第0⾏,第2个元素的地址
列指针
a[0]+2
第0⾏,第3个元素的地址
列指针
两个重要概念:⾏指针和列指针。
⾏指针:指的是⼀整⾏,不指向具体元素。
列指针:指的是⼀⾏中某个具体元素。
可以将列指针理解为⾏指针的具体元素,⾏指针理解为列指针的地址。那么两个概念之间的具体转换是:
*⾏指针----列指针
&列指针----⾏指针
根据以上转换公式:
⾏指针
转换成:列指针
列指针等价表⽰
内容
内容等价表⽰
含义
a或a+0
*a
a[0]
*a[0]
*(*a)
a[0][0]
a+1
*(a+1)
a[1]
*a[1]
*(*(a+1))
*a[2]
*(*(a+2))
a[2][0]
对于元素a[1][2],其地址⽤列指针表⽰为a[1]+2,等价表⽰为*(a+1)+2,那么内容是*(*(a+1)+2);列指针
⾏指针
等价表⽰
含义
a[0]
&a[0]
&a或&(a+0)
第0⾏
a[1]
&a[1]
&(a+1)
第1⾏
a[2]
&a[2]
&(a+2)
第2⾏
⽰例1:⽤列指针输出⼆维数组。
#include
void main()
{
int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};
int *p= a[0];  // 列指针的定义法
for(; p < a[0] + 12; p++)
{
printf("%d ",*p);
}
⽰例2:⽤⾏指针输出整个⼆维数组。
#include
void main()
{
int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};
int (*p)[4]= &a[0]; // ⾏指针定义法或者int (*p)[4]= a; int i, j;
for(i = 0; i < 3; i++)
for(j = 0; j < 4; j++)
{
printf("%d ",*(*(p + i) + j));
}
return;
}

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