我正在阅读Yashavant Kanetkar的书《让我们一起学C语言》。
在指针数组章节中,有一段代码给我带来了问题:
int main()
{
static int a[]={0,1,2,3,4}; //-----------(MY PROBLEM)
int *p[]={a,a+1,a+2,a+3,a+4};
printf("%u %u %d\n",p,*p,*(*p));
return 0;
}
我不理解为什么数组
a
必须初始化为静态的。我试过不用静态关键字来初始化它,但是我收到一个错误提示,“非法”。请帮我解决这个问题。
static
表示指定了a
具有静态存储,所以当作指针处理时它是一个编译时常量表达式。在 C90 中,数组(作为聚合类型)的初始化程序需要常量表达式。 - obataku