I am reading the book Let us C by Yashavant Kanetkar.
In the Array of Pointers section there is a section of code which is giving me problems:
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;
}
What I don’t understand is why has the array a have to be initialized as static. I tried initializing it without the static keyword but I got an error saying “illegal”. Please help.
C90 (6.5.7) had
And you are initializing an object that has an aggregate type, so the value must be known at compile time and the address of automatic variables are not in that case.
Note this has changed in C99 (6.7.8/4)
The constraint on object with aggregate or union type has been removed and I’ve not found it placed somewhere else. Your code with static removed should be accepted by a C99 compiler (it is by
gcc -std=c99for instance, which seems to confirm that I’ve not overlooked a constraint elsewhere).