数组指针问题

3 c arrays pointers initialization

我试过这个指针数组的例子.我收到错误"函数main中的非法初始化"

int main()
{
    int a[]={1,2,3,4,5};
    int b[]={1,2,3,4,5};
    int c[]={1,2,3,4,5};
    int *p[3]={a,b,c};
    int i;
    clrscr();
    for(i=0;i<3;i++)
        printf("%d - %u\n",*p[i],p[i]);
    getch();
}
Run Code Online (Sandbox Code Playgroud)

如果我在数组声明中使用static int而不是int,它可以正常工作.任何人都可以告诉我静态效果.非常感谢.

Zit*_*rax 5

在gcc中,如果使用-pedantic标志,则会看到有关此内容的警告.

但这显然已经在标准中发生了变化,在C90中它说:

具有静态存储持续时间的对象的初始值设定项中的所有表达式或具有聚合或联合类型的对象的初始化列表中的所有表达式应为常量表达式

并且它不被允许,因为p数组是聚合类型,但在C99中我们有:

具有静态存储持续时间的对象的初始化程序中的所有表达式应为常量表达式或字符串文字.