泪目了,泪目了!!!
花费大力气才学会
先看看int 型
#include<stdio.h>
int main()
{
int a[4][4]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
printf("%p\n",a[0]);//0行0列的地址
printf("%p\n",a[0]+1);//0行1列的地址
printf("%p\n",*(a+0));//0行0列的地址
printf("%p\n",*(a+1));//1行0列的地址
printf("%p\n",*(a+1)+1);//1行1列的地址
printf("%p\n",*a+2);//0行2列的地址
printf("%p\n",*(a+2));//2行0列的地址
printf("%p\n",&a[1]);//1行0列的地址
printf("%p\n",&a[0]+2);//0行2列的地址
printf("%p\n",&a[0][2]);//0行2列的地址
printf("%p\n",a);//0行0列的地址
/*
a[i]指i行0列的地址
a[i]+j指i行j列的地址
*(a+i)指i行0列的地址
*(a+i)+j指i行j列的地址
*a+i指0行i列的地址
&a[i]指i行0列的地址
&a[i]+j指i行j列的地址
&a[i][j]指i行j列的地址
*/
//行指针: a+i &a[i]
//列指针:*(a+i)+j a[i]+j &a[i][j]
//行指针加*变为列指针;列指针加&变为行指针
//优先级 :()>[]>*
return 0;
}
#include<stdio.h>
int main()
{
int a[4][4]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
int (*p)[4];
p=a; //只能等于行指针
printf("%p\n",p);//0行首地址,行指针
printf("%p\n",p+1);//1行首地址,行指针
printf("%p\n",p[1]);//1行0列的地址,列指针
printf("%p\n",p[0]+1);//0行1列的地址,列指针
printf("%d\n",*(p[1]));//1行0列的值,列->值
printf("%d\n",*(p[0]+1));//0行1列的值,列->值
printf("%d\n",**p);//0行首值,行->列->值
printf("%d\n",**(p+1));//1行首值,行->列->值
//行指针+* -> 列指针; 列指针+* -> 值;行指针+* -> 列指针
return 0;
}