Structs
Field Access
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
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;
}
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
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
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