I have the following:
typedef struct
{
string city;
int temp;
}
avg_temp;
avg_temp temps[NUM_CITIES];
void sort_cities(void);
int main(void)
{
temps[0].city = "Austin";
temps[0].temp = 97;
temps[1].city = "Boston";
temps[1].temp = 82;
temps[2].city = "Chicago";
temps[2].temp = 85;
temps[3].city = "Denver";
temps[3].temp = 90;
temps[4].city = "Las Vegas";
temps[4].temp = 105;
temps[5].city = "Los Angeles";
temps[5].temp = 82;
temps[6].city = "Miami";
temps[6].temp = 97;
temps[7].city = "New York";
temps[7].temp = 85;
temps[8].city = "Phoenix";
temps[8].temp = 107;
temps[9].city = "San Francisco";
temps[9].temp = 66;
}
Now, the sizeof(temps) = 160, sizeof(temps[0]) = 16, sizeof(temps[0].city) = 8 and sizeof(temps[0].temp = 4.
since city and temp take up 12 what takes up 4 in temps[0] ?
This structure
typedef struct
{
string city;
int temp;
}
avg_temp;
is aligned according to the more strict alignment of its data member of the type string
(which is evidently an alias for the type char *
) that has the size equal to 8.
So the structure is appended with 4 bytes.