Структуры в c на самом деле просто большие примитивы. если вы посмотрите на ассемблер, сгенерированный для вашего назначения foo, он просто действует как int. Вот пример:
У меня есть определение структуры:
typedef struct Foo Foo;
struct Foo {
int a, b;
};
И я объявляю Foo:
Foo foo = {0,1};
Стек (некоторые мелочи, относящиеся к конкретной машине, затенены, но в целом) выглядит следующим образом (при условии 4-битных целых и однобитных байтов)
%esp %ebp[-8] %ebp[-4] %ebp
[.... 0000 0001 ....]
вы обнаружите, что инструкция для назначения foo.b = 1
равна
mov $1, -4(%ebp)
Это та же самая инструкция, которая присваивает int
в стеке значение.