指向二维数组的指针及二级指针简介
概述:二维数组在内存上的分布是连续的,举例来说
a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};(左边是列数,右边是行数)
在空间上他是1 2 3 4 但是在内存上他的分布是 1 2 3 4 5 6 7 8 9 10 11 12
5 6 7 8
9 10 11 12
故要使用指针去进行上下跑时有几种方法:
一、int *p1指针指向a[0][0]时,使用*(p1+4)即可
二、int (*p2)[4],此意为建立一个一次指向四个int长度的指针,这个指针每次移动均移动4个int大小,正好可以跨一整行
*p3[4]和(*p3)[4]指针辨析:
int *p3[4],此意为建立一个指针数组,既建立一个数组用以存储指针,若令p4=&a[0][0],*p4将会是a[0][0]的地址,而**p4会是a[0][0]的值1,而**(p4+1)将不会得到所需要的任何值,因为此处指向的是一个不知道里面有啥的地址。
二级及更多级指针小记
如int **p5=a[0][0],则%p *p5为a[0][0]地址,而**p5为a[0][0]的值