#include <stdio.h>
int main()
{
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
int (*p)[4],j=2;
int i=1;
printf("1\n"); //1
p=a;
printf("a[%d][%d]=%d \n",i,j,a[i][j]);
printf("*(*(a+%d)+%d)=%d\n",i,j,*(*(a+i)+j));
printf("\n2\n"); //2
printf("*(*(p+%d)+%d)=%d\n",i,j,*(*(p+i)+j));
printf("*(*(++p))=%d\n",*(*(++p)));
printf("\n3\n"); //3
//p=a;
printf("*(p[%d]+%d)=%d\n",i,j,*(p[i]+j));
printf("p[%d][%d]=%d\n",i,j,p[i][j]);
printf("\n4\n"); //4
p=a;
printf("&p[1]=%d\n",&p[1]);
printf("&a[1]=%d\n",&a[1]);
printf("&(*(p+1))=%d\n",&(*(p+1)));
printf("\n5\n"); //5
printf("*(a+2)+3=%d\n",*(a+2)+3);
printf("&(*(*(a+2)+3))=%d\n",&(*(*(a+2)+3)));
printf("p[2][3]=%d\n",&p[2][3]);
printf("\n6\n"); //6
printf("a=%d\n",a);
printf("p=%d\n",p);
printf("&a=%d\n",&a);
printf("&p=%d\n",&p);
printf("\n7\n"); //7
p=a+1;
printf("p=%d\n",p);
printf("&p=%d\n",&p);
return 0;
}
指针是一个不同于普通变量的变量,首先说它和普通变凉的相同点:都可以储存值,都有一个内存地址,即自身地址是固定的const(eg:int *p,a[5],s; &p 与&a都是固定的)
但指针p储存的是值是地址(是可变的),普通变量s,a[5]存的是数值,
eg:int *p; *(++p)是合法的
int a[6]; ++a是错误的
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12,};
int *p[4];
p=a;
p[2][3] 等价于a[2][3];
a=&a[0]=&a[0][0]=p=&p[0]=&p[0][0]=&(*p);
&a[1]=&(a+1)=&a[1][0]=&p[1]=&p[1][0]=&(*(p+1));
&a[2][3]=*(a+2)+3=&(*(*(a+2)+3))=*(p+2)+3=&(*(*(p+2)+3))=&p[2][3];
//看完这个就全懂了。。。。