以下程序在初始化时给出了错误(*a)[5]=((*)[])&v;.当我没有输入该行时,我仍然会收到错误.
int main()
{
int v[10];
int **p;
int (*a)[5];
(*a)[5]=((*)[])&v;
printf("%d\n",*a);
printf("%d\n",sizeof(v));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
&v是对int数组的引用v,因此它是类型int **(基本上).int (*a)[5]意味着你要声明一个指向5个int数组的指针.但是,在下一行中,当您编写时(*a)[5],这意味着您将取消引用a以获取int指针,然后再次解除引用以访问存储在的元素[5].但在C数组索引为零,所以你只能访问[0]到[4],而且[5]不分配.
你想要的a = &v.这将生成a一个指向int指针的指针v.还有其他的问题,如*a为int型指针,以便"%d"不会飞,你没有给任何值,a或者v,((*)[])仅仅是不必要的,等等.