指针数组,即指针所组成的数组,其本质也是指针。数组和指针由于其本质上都是地址,所以在输入时,不用加&,但是在输出时,需要加*。
1 #include<stdio.h>
2 int main()
3 {
4 int a[3][4];
5 int *p[3]; //占24个字节
6 int i,j;
7 for(i=0;i<3;i++)
8 *(p+i)=*(a+i); //可写为p[i]=a[i]。
9
10 for(i=0;i<3;i++)
11 for(j=0;j<4;j++)
12 scanf("%d",p[i]+j); //可写为*(p+i)+j
13
14
15 for(i=0;i<3;i++)
16 { for(j=0;j<4;j++)
17 printf("%d\t",*(p[i]+j)); //可写为*(*(p+i)+j))
18 putchar('\n');}
19 }
在讲数组指针之前,首先要明白,多维数组的数组名,代表的是第一个数组的地址,而不是首元素的地址,更不能代表整个数组的地址。
1 #include<stdio.h>
2 int main()
3 {
4 int a[3][4];
5 int (*pa)[4];
6 int i;
7 for(pa=a;pa<a+3;pa++) //a代表首个一维数组的地址,a+3代表第三个,不能写pa<3,pa是地址,怎么小于一个数?
8 {
9 for(i=0;i<4;i++)
10 {
11 scanf("%d",*pa+i); //&a[i][j]相当于*(a+i)+j,a+i相当于pa
12 }
13 }
14
15 for(pa=a;pa<a+3;pa++)
16 {
17 for(i=0;i<4;i++)
18 {
19 printf("%d\t",*(*pa+i)); //二维数组是*(*(a+i)+j),这里的a+i就相当于pa
20 }
21 printf("\n");
22 }
23 }