As programmers do we have to care about struct padding in the context of pointers to struct?
## Do Programmers Need to Care About Struct Padding in the Context of Pointers to Struct?
### Short Answer
No, you don't need to learn about struct padding.
### Explanation
C adds padding for performance reasons. You can disable it (not recommended) by adding `#pragma pack(1)` at the top of your file to set one-byte boundaries.
### Pointer Arithmetic and Struct Padding
The assertion that pointer arithmetic must be used with care in the context of struct padding and pointers is vague and useless.
When accessing members of structures or the bytes that represent structures, you must consider padding because a structure may have padding between its members. This means that if a member is at offset O from the start of the structure and has size S, the next member may not start at offset O+S but at O+S+P, where P is the number of padding bytes.
### Arrays of Structures and Padding
The assertion that arrays of structures may have extra memory between their elements is technically incorrect. A structure may have padding between its members and at the end, but this is considered part of the structure. When an array is created, there is no additional padding between the elements of the array, only the padding inside the structures, including the padding at their ends.
### Memory Layout and Padding
To reduce memory use in structures, order the members with the largest alignment requirements first.
When accessing the memory representing a structure in other ways, such as using multiple different structures in a union or storing bytes for reinterpretation by other software, you need to care about padding and issues about how data is represented, such as endianness.
### Example
Consider the following scenario:
- A sender on a 32-bit Raspberry Pi with a packed struct `data` (sizeof(struct data) is 8 bytes) sends `{ .c = 'a', .num = 1 }`.
- A receiver on a 64-bit PC with the same unpacked struct (sizeof(struct data) is 16 bytes) receives the data.
What will the receiver have in `.num`?
The receiver will have `1` in `.num` because the padding in the sender's struct is ignored by the receiver. The receiver's struct has the same layout as the sender's struct, even though the receiver's struct has more padding.