以下程序在初始化时给出了错误(*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
,((*)[])
仅仅是不必要的,等等.