Here's a simple C program showing an array of structs: ====================================================== struct prec { char op; int preced; char assoc; }; int main() { struct prec p[] = {{'^', 4, 'R'}, {'*', 3, 'L'}, {'/', 3, 'L'}, {'+', 2, 'L'}, {'-', 2, 'L'}, {'(', 1, 'R'}, {')', 1, 'R'}, {'?', 0, '?'}}; int i = 0; for (i = 0; p[i].op != '?'; i++) printf("i=%i: op=%c, preced=%i, assoc=%c\n", i, p[i].op, p[i].preced, p[i].assoc); } Output: % cc -o prec1 prec1.c % prec1 i=0: op=^, preced=4, assoc=R i=1: op=*, preced=3, assoc=L i=2: op=/, preced=3, assoc=L i=3: op=+, preced=2, assoc=L i=4: op=-, preced=2, assoc=L i=5: op=(, preced=1, assoc=R i=6: op=), preced=1, assoc=R =================================================== This can be rewritten in the following awkward form: =================================================== struct prec { char op; int preced; char assoc; }; int main() { int i = 0; struct prec p0 = {'^', 4, 'R'}; struct prec p1 = {'*', 3, 'L'}; struct prec p2 = {'/', 3, 'L'}; struct prec p3 = {'+', 2, 'L'}; struct prec p4 = {'-', 2, 'L'}; struct prec p5 = {'(', 1, 'R'}; struct prec p6 = {')', 1, 'R'}; struct prec p7 = {'?', 0, '?'}; struct prec p[8]; p[0] = p0; /* 0 */ p[1] = p1; /* 1 */ p[2] = p2; /* 2 */ p[3] = p3; /* 3 */ p[4] = p4; /* 4 */ p[5] = p5; /* 5 */ p[6] = p6; /* 6 */ p[7] = p7; /* 7 */ for (i = 0; p[i].op != '?'; i++) printf("i=%i: op=%c, preced=%i, assoc=%c\n", i, p[i].op, p[i].preced, p[i].assoc); } Same output ... ====================================================== But the following form produces syntax errors: ====================================================== struct prec { char op; int preced; char assoc; }; int main() { int i = 0; struct prec p[8]; p[0] = {'^', 4, 'R'}; /* 0 */ p[1] = {'*', 3, 'L'}; /* 1 */ p[2] = {'/', 3, 'L'}; /* 2 */ p[3] = {'+', 2, 'L'}; /* 3 */ p[4] = {'-', 2, 'L'}; /* 4 */ p[5] = {'(', 1, 'R'}; /* 5 */ p[6] = {')', 1, 'R'}; /* 6 */ p[7] = {'?', 0, '?'}; /* 7 */ for (i = 0; p[i].op != '?'; i++) printf("i=%i: op=%c, preced=%i, assoc=%c\n", i, p[i].op, p[i].preced, p[i].assoc); } Output: % cc -o prec3 prec3.c "prec3.c", line 10: syntax error before or at: { "prec3.c", line 11: syntax error before or at: { "prec3.c", line 12: syntax error before or at: { "prec3.c", line 13: syntax error before or at: { "prec3.c", line 14: syntax error before or at: { "prec3.c", line 15: syntax error before or at: { "prec3.c", line 16: syntax error before or at: { "prec3.c", line 17: syntax error before or at: { "prec3.c", line 22: cannot recover from previous errors ========================================================== The syntax errors are there because the curley bracket notation can only be used as part of a declaration in C.