I'm learning how to work with struct
s in C and wrote the following example:
#include <stdio.h>
#include <stdlib.h>
struct s1{
unsigned short member;
};
int main()
{
struct s1 *s1_ptr = malloc(sizeof(*s1_ptr));
s1_ptr -> member = 10;
printf("Member = %d\n", *s1_ptr); // Member = 10
}
QUESTION: Is it guaranteed that in all cases a pointer to a struct is a exactly the same pointer to its first element?
In this particular case it works as I expected, but I'm not sure if it is guaranteed. Is compiler free to insert some padding in the very beginning?
The only I could find about the structure type layout is the Section 6.2.5 Types
of N1570:
A structure type describes a sequentially allocated nonempty set of member objects (and, in certain circumstances, an incomplete array), each of which has an optionally specified name and possibly distinct type.
But there is nothing about padding here.