To answer your question with a heading, you cannot in the form in which you entered it, but you can using the union:
struct A { int a; union { char b[16]; struct { char b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15; } }; int c; };
Now you can assign and use it as follows:
const A test = { .a = 1, .b0 = 'a', .b1 = 'b', .b2 = 'c', .b3 = 'd', .b4 = 'e', .b5 = 'f', .b6 = 'g', .b7 = 'h', .b8 = 'i', .b9 = 'j', .b10 = 'k', .b11 ='l', .b12 ='m', .b13 ='n', .b14 ='o', .b15 = 'p', .c = 255 }; printf("The final b is >%c<.\n", test.b[15]);
This works because of the flat layout of a fixed-size array in the structure (which others mentioned) and because unions (in this case an anonymous union ) allow you to access the same memory location through different types with different identifiers. Basically, you just set a predefined type.