指针与二维数组
1、
对二维数组a,:a+i,a[i],*(a+i),&a[i][0]是等同的,代表第i行的首地址。
2、
&a[i]和a[i]也是等同的。因为在二维数组中不能把&a[i]理解为元素a[i]的地址,不存在元素a[i]。
由此,我们得出:a[i],&a[i],*(a+i)和a+i也都是等同的。
a[i]+j=*(a+i)+j表示i行j列元素的首地址
3、把二维数组a分解为一维数组a[0],a[1],a[2]之后,设p为指向二维数组的指针变量。
int (*p)[4] 它表示p是一个指针变量,它指向包含4个元素的一维数组。
若指向第一个一维数组a[0],其值等于a,a[0],或&a[0][0]等。P+1----a[1]
而p+i则指向一维数组a[i]。从前面的分析可得出*(p+i)+j是二维数组i行j 列的元素的地址,而*(*(p+i)+j)则是i行j列元素的值
#include <stdio.h>
int main()
{
int a[3][4] ={0,1,2,3,4,5,6,7,8,9,10,11};
int (*p)[4];
int i,j;
p = a;
for(i=0; i<3; i++)
{
for(j=0; j<4; j++)
printf("%3d ", *(*(p+i)+j));
printf("\n");
}
Return 0;
}
4指针数组
指针数组是一个数组,里面存放的是指针
int *a[4];