Short answer: they are allocated with the order as they declared in the struct.
Example:
#include <stdio.h> #include <string.h> struct student { int id1; int id2; char a; char b; float percentage; }; int main() { int i; struct student record1 = {1, 2, 'A', 'B', 90.5}; printf("size of structure in bytes : %d\n", sizeof(record1)); printf("\nAddress of id1 = %u", &record1.id1 ); printf("\nAddress of id2 = %u", &record1.id2 ); printf("\nAddress of a = %u", &record1.a ); printf("\nAddress of b = %u", &record1.b ); printf("\nAddress of percentage = %u",&record1.percentage); return 0; }
Output:
size of structure in bytes : 16 Address of id1 = 675376768 Address of id2 = 675376772 Address of a = 675376776 Address of b = 675376777 Address of percentage = 675376780
The pictorial representation of above structure memory allocation is given below. This diagram will help you to understand the memory allocation concept in C very easily.

Further reading: check out here (also the source for the above example) for C – Structure Padding and Structure dynamic memory allocation in C.