The dot operator reads or writes a field inside a struct value.

dot operator `account.balance` selects the `balance` field of `account`.
update field Assigning to a field changes only that part of the struct.

Field Access

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

struct Account {
    int balance;
    int limit;
};

int main(void) {
    int deposit = 5;
    struct Account account = {20, 30};

    account.balance = account.balance + deposit;

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

struct Account {
    int balance;
    int limit;
};

int main(void) {
    int deposit = 2;
    struct Account account = {20, 30};

    account.balance = account.balance + deposit;

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

struct Account {
    int balance;
    int limit;
};

int main(void) {
    int deposit = 10;
    struct Account account = {20, 30};

    account.balance = account.balance + deposit;

    printf("balance=%d\n", account.balance);
    return 0;
}
  1. deposit ← 5, account ← (empty), account.balance ← 25

    8int main(void) {9    int deposit→ 5 = 5; //@deposit=2, 1010    struct Account account→ (empty) = {20, 30};1112    account.balance→ 25 = account.balance + deposit5;1314    printf("balance=%d\n", account(empty).balance);15    return 0;16}
    outputbalance=25
  1. deposit ← 2, account ← (empty), account.balance ← 22

    8int main(void) {9    int deposit→ 2 = 2;10    struct Account account→ (empty) = {20, 30};1112    account.balance→ 22 = account.balance + deposit2;1314    printf("balance=%d\n", account(empty).balance);15    return 0;16}
    outputbalance=22
  1. deposit ← 10, account ← (empty), account.balance ← 30

    8int main(void) {9    int deposit→ 10 = 10;10    struct Account account→ (empty) = {20, 30};1112    account.balance→ 30 = account.balance + deposit10;1314    printf("balance=%d\n", account(empty).balance);15    return 0;16}
    outputbalance=30