70,022
社区成员




int (*p)[5]; //定义一个指向有5个元素的数组
int a[5] = {1, 2, 3, 4, 5};
p = &a; //&a是什么意思?为啥用a不可以呢?a不是代表数组的首地址吗?
#include<stdio.h>
int a[3]={1,3,5};
int *p1= NULL;
int (*p2)[3]=NULL;
int main()
{
printf("首个元素地址%p\n",a);
printf("第二个元素地址%p\n",a+1);
printf("正真的数组地址%p\n",&a);
printf("正真的数组地址%p\n",(&a)[0]);
printf("数组地址+1后是%p\n",(&a)[1]);
printf("sizeof (a) = %d\n",sizeof (a));
printf("sizeof (&a) = %d\n",sizeof (&a));
printf("sizeof (a + 1) = %d\n",sizeof (a + 1));
printf("---------------------------------\n");
printf("为什么是 %d\n",*(a+1));
printf("为什么是 %d\n",*(*(&a+1) - 1));
printf("为什么是 %d\n",*a);
printf("---------------------------------\n");
p1 =a;
p2 = &a;
printf("为什么是 %d\n",p1[0]);
printf("为什么是 %d\n",*p2[0]);
printf("为什么是 %d\n",p2[0]);
printf("为什么是 %d\n",sizeof (p1));
return 0;
int (*p)[5];//p实际上是一个指向二维数组的指针
p = a不行,但是p=&a就可以,
a的类型是 int [5],可以隐式转换为int*, 但不能隐式转换为 int (*)[5]
&a的类型是int(*)[5],刚好匹配,无需转换。