Padding. In short, each item of a different type is on a 4-byte boundary. So char p effectively takes up 4 bytes (well, it doesn't because it's a char, but the other 3 bytes are not used.)

If you had
float f;
int a[2];
char p,q,r;
then this would probably also be 16. chars don't have to be on 4-byte boundaries so p,q,r use 3 of those 4 bytes.

This isn't something you should worry about; padding is very rarely an issue, and by the time it is, you'll know enough about programming to know why and how to solve it.