重点要理解指针和数组的区别:
1.指针可以解引用,而数组不行。
2.数组本质上是地址,指针本质上也是地址,但是数组是常量无法赋值,而指针是变量可以赋值。
注意不管是二维数组还是多维数组,第一次解引用,是从最外层,也就是第一维数组解除。
*p = p[0]
*(p+1) = p[1]
*p+1 = p[1] + 1 //等价于p[1]元素的值加上整数1
二维数组的指针访问
#include <stdio.h>
void method(int (*p)[3],int n);
int main(){
int a[2][3] =
{
{
789,654,123},
{
357,753,951}};
method(a,2);
}
void method(int (*array)[3],int n)
{
int i,j;
int (*p)[3];
p = array;
for(i=0;i<n;i++){
for(j=0;j<3;j++)
{
printf("%d\n",*(*(p+i)+j));
}
}
}
三维数组的指针访问
#include <stdio.h>
void method(int (*array)[2][3],int n);
int main(){
int i,j,k;
int data[2][2][3] = {
{
{
999, 888, 777 }, {
666, 555, 444} },
{
{
333, 222, 111 }, {
100, 520,250 } } };
int (*p)[2][3];
p = data; //data 实际上指向 data[0][0][0] ;
for(i=0;i<2;i++)
for(j=0;j<2;j++)
for(k=0;k<3;k++){
printf("%d\n",*(*(*(p+i)+j)+k));
}
}