指向c中的数组的指针

Ang*_*gus 1 c arrays pointers

以下程序在初始化时给出了错误(*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)

Bla*_*ack 5

&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,((*)[])仅仅是不必要的,等等.