1.设p是指向二维数组a[m][n]的指针变量,则有:
int* p=a[0];//此时P是指向一维数组的指针。P++后,p指向 a[0][1]。
2.如果定义int (*p1)[n];p1=a;p1++后,p1指向a[1][0];
则p+j将指向a[0]数组中的元素a[0][j]。
由于a[0]、a[1]┅a[M-1]等各个行数组依次连续存储,则对于a数组中的任一元素a[i][j],指针的一般形式如下:
p+i*N+j, 相应的如果用p1来表示,则为*(p1+i)+j。
元素a[i][j]相应的指针表示为:
*( p+i*N+j) ,相应的如果用p1来表示,则为*(*(p1+i)+j)。
同样,a[i][j]也可使用指针下标法表示,如p[i*N+j]。
若有:
int *p=a[0];
则数组a的元素a[1][2]对应的指针为:p+1*4+2
元素a[1][2]也就可以表示为:*( p+1*4+2)
用下标表示法,a[1][2]表示为:p[1*4+2]
扩展资料:
指针与数组的关系:
1.指针数组:就是一个由指针组成的数组,那个数组的各个元素都是指针,指向某个内存地址。 char *p[10]; //p是一个指针数组
2.数组指针:数组名本身就是一个指针,指向数组的首地址。注意这是一个常数。
example:
char (*p)[10]; //p是一个数组指针
3.函数指针:本身是一个指针,指向一个函数入口地址,通过该指针可调用其指向的函数,使用函数指针可实现回调函数。
参考资料: