一维数组a1[10]:
a1代表的是,第一个元素的地址;a1为指向整型的指针。
普通的指针int *p1 = a1[0];
pi可以逐个访问数组的元素,*(p1 +5)等于a[5]!
二维数组a[5][5]:
a是一个指向整型数组的指针,可以理解为一个数组指针。
a <--> &a[0]
int (*p)[5];
p = a;或者p = &a[0];都可以使 **(p+1)等于a[1][0]!
#include <stdio.h>
int main()
{
int a[5][5] = {{1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}};
int (*p)[5];
int *pi = a[0];
p = &a[0]; //p = a;
printf("pi = %d\n", *(pi + 5));
printf("p = %d\n", **(p + 1));
return 0;
}
/*******************************************************************************/
问:申请一个2*3的数组,能不能按照3*2的数组来用。
答:其实可以,数组本身也是顺序存放的,存放的时候其实没有什么多维的概念,用一个数组指针就可以指向它就可以了,当然,在GCC的编译时,会给出警告的,但是可以用。
#include <stdio.h>
int main()
{
char a[2][3] = {{1, 2, 3}, {4, 5, 6}};
char (*p)[2] = a;
printf("%d\n", a[1][0]);
printf("%d\n", p[1][0]);
return 0;
}
打印:
4
3
/*******************************************************************************/
#include <stdio.h>
int main()
{
int a[10] = {0};
printf("%d\n", &a[1] - &a[0]);
return 0;
}
打印为1。
修改后:
printf("%d\n", (int)&a[1] - (int)&a[0]);
打印为4。