#include<stdio.h>
#include<stdlib.h>
struct keyVal
{
int key;
int val;
};
int main()
{
struct keyVal *arr[5];
int i;
for(i=0;i<5;i++)
printf("\n : %p %p ",&arr[i][0].val,&arr[i]);
printf("\n\n");
printf("\n : %d %d ",arr[0][0].val,arr[0]->val);
printf("\n\n");
for(i=0;i<5;i++)
printf("\n : %d %d ",arr[i][0].val,arr[i]->val);
printf("\n\n");
return 0;
}
First, for( ; ; ); will generate same %p %p from arr[0][0] to arr[4][0] and arr[0] to arr[4], which means arr[i][0] == arr[i] where i = 0,1,2,3,4.
Second for( ; ; ); should print values(garbage value) of arr[i][0].key (arr[i]->key).
We can access key by doing:
arr[i][0].key OR arr[i]->key where i = 0,1,2,3,4.