你好。 刚刚你说那个行指针。跟指向一维数组的指针是同一个东西么?

兄弟们,请说下,你好。 刚刚你说那个行指针。跟指向一维数组的指针是同一个东西么?
最新回答
魔仙女王

2024-05-19 09:21:59

行指针是二维数组中的,二维数组中分为行指针和列指针,比如1 2 3
4 5 6
7 8 9
这个3行3列的二维数组,其中定义指针*p,p=a[0]就是行指针指向1,p=a[1]就是行指针指向4,p=a[1]+1就是行指针加1指向7,虽然两者指向都是1,但是意义不同
而一维数组123456789中p=a就是一个指向1的指针,a[0]+1就是2但是指针仍指向1的地址
不知道你有没有理解,我的qq:421071849,我们可以讨论
阳光是我啃园的

2024-05-19 10:04:08

二维数组其实也是一个数组,你可以这样想
例如
int a[2][3]={{1,2,1},{3,4,3});
你拆开看,可以作为int a[2]表示有两个元素的数组,后面的[3]表示,前面部分每个元素也是一个数组。这个数组还有3个元素。
指向这个数组指针,int (*p)[3];也同样,同样拆开int (*p) 指向一个数组,后面的[3]表示,前面部分每个元素也是一个数组。这个数组还有3个元素。
使用时,这样理解。
p=a;//p指向数组
p[0]第一个元素,p[0][1],第一个元素是数组,数组中第一个元素。
所以p[0][1]=2
p[0]=*(p+0);
p[0][1]=*(*(p+0)+1)
p[1][2]=*(*(p+1)+2)

这个你明白了,指针你就清楚了。
中指朝天一声操

2024-05-19 10:37:05

不是。首先定义就不一样,一维数组的指针是这样的:int a[5],*p=a;而行指针是这样定义的:int aa[3][5],(*p)[5]=aa;括号不能省略,因为他先是指针,方括号和其中的常量不能省略,它表示这个行指针所指向的二维数组的列数,即每一行有几个元素。对于一维数组,a[1]==p[1]==*(p+1)==*(a+1),这都是成立的。对于二维数组,aa[1][2]==*(p[1]+2)==*(aa[1]+2)==*(*(aa+1)+2)才是成立的,并且p必须是行指针。为什么这么复杂呢?就是因为编程系统把二维数组看成一维数组处理的原因,*(*(aa+1)+2)中的*(aa+1)相当于一维数组中的aa[1],但是,再往下处理,在二维数组中,aa[1]又是第一行的起始地址,所以*(aa+1)+2才是二维数组中aa[1][2]的地址。