If about changing the definition of daytab go as a third example, you can use this:
int * daytab[] = { (int[]){0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, (int[]){0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} };
instead.
Or save the save and mark the end of the array using the sentinel:
int * daytab[] = { (int[]){0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, (int[]){0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, NULL };
Or ^ 2, in order to stay even with saving the label, the internal array also ends:
int * daytab[] = { (int[]){0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, -1}, (int[]){0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, -1}, NULL };
Please note that the ( (Type){Initialiser} ) connections used here are only available with C99.