行指针是二维数组中的,二维数组中分为行指针和列指针,比如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,我们可以讨论
二维数组其实也是一个数组,你可以这样想例如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]=2p[0]=*(p+0);p[0][1]=*(*(p+0)+1)p[1][2]=*(*(p+1)+2)这个你明白了,指针你就清楚了。
不是。首先定义就不一样,一维数组的指针是这样的: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]的地址。