#include <stdio.h>
#include <stdint.h>
typedef struct s{
    uint8_t a[1];
    uint16_t b;
    uint8_t c[1];
}s_t;
int main()
{
    printf("size = %d", sizeof(s_t));
    return 0;
}
I am not sure why the output of this program is 6 bytes and not 5. Why does the compiler pad an extra byte after the last member ? It also seems like, if you make the last member array length 3, the padding makes the size 8. I am unable to explain this since this is not the case for 2 arrays only.
 
     
    