A struct initializer fills fields when the value is created.

initializer The initializer values are copied into the struct fields.
field order Without designators, initializer values follow the field declaration order.

Struct Initialization

price
struct_initialization.c
Replay: real traced execution (multi-file project)
#include <stdio.h>

struct Product {
    int price;
    int count;
};

int main(void) {
    int price = 4;
    struct Product item = {price, 3};
    int total = item.price * item.count;

    printf("total=%d\n", total);
    return 0;
}
#include <stdio.h>

struct Product {
    int price;
    int count;
};

int main(void) {
    int price = 7;
    struct Product item = {price, 3};
    int total = item.price * item.count;

    printf("total=%d\n", total);
    return 0;
}
#include <stdio.h>

struct Product {
    int price;
    int count;
};

int main(void) {
    int price = 9;
    struct Product item = {price, 3};
    int total = item.price * item.count;

    printf("total=%d\n", total);
    return 0;
}
  1. price ← 4, item ← (empty), total ← 12

    8int main(void) {9    int price→ 4 = 4; //@price=7, 910    struct Product item→ (empty) = {price4, 3};11    int total→ 12 = item.price4 * item.count3;1213    printf("total=%d\n", total12);14    return 0;15}
    outputtotal=12
  1. price ← 7, item ← (empty), total ← 21

    8int main(void) {9    int price→ 7 = 7;10    struct Product item→ (empty) = {price7, 3};11    int total→ 21 = item.price7 * item.count3;1213    printf("total=%d\n", total21);14    return 0;15}
    outputtotal=21
  1. price ← 9, item ← (empty), total ← 27

    8int main(void) {9    int price→ 9 = 9;10    struct Product item→ (empty) = {price9, 3};11    int total→ 27 = item.price9 * item.count3;1213    printf("total=%d\n", total27);14    return 0;15}
    outputtotal=27