Structs
Struct Pointers
A pointer to a struct lets a function update the original grouped value.
arrow operator
`point->x` means the `x` field of the struct pointed to by `point`.
update original
Passing a pointer lets the function write back into the caller's struct.
Struct Pointers
struct_pointers.c
Replay: real traced execution (multi-file project)
#include <stdio.h>
struct Point {
int x;
int y;
};
void moveRight(struct Point *point, int delta) {
point->x = point->x + delta;
}
int main(void) {
int delta = 2;
struct Point point = {3, 4};
moveRight(&point, delta);
printf("x=%d y=%d\n", point.x, point.y);
return 0;
}
#include <stdio.h>
struct Point {
int x;
int y;
};
void moveRight(struct Point *point, int delta) {
point->x = point->x + delta;
}
int main(void) {
int delta = 5;
struct Point point = {3, 4};
moveRight(&point, delta);
printf("x=%d y=%d\n", point.x, point.y);
return 0;
}
#include <stdio.h>
struct Point {
int x;
int y;
};
void moveRight(struct Point *point, int delta) {
point->x = point->x + delta;
}
int main(void) {
int delta = 8;
struct Point point = {3, 4};
moveRight(&point, delta);
printf("x=%d y=%d\n", point.x, point.y);
return 0;
}
delta ← 2, point ← (empty)
12int main(void) {13 int delta→ 2 = 2; //@delta=5, 814 struct Point point→ (empty) = {3, 4};1516 moveRight(&point(empty), delta2);point->x ← 5
8void moveRight(struct Point *point⟨addr A⟩, int delta2) {9 point->x→ 5 = point->x + delta2;10}moveRight(&point, delta);
16 moveRight(&point(empty), delta2);1718 printf("x=%d y=%d\n", point(empty).x, point.y);19 return 0;20}outputx=5 y=4
delta ← 5, point ← (empty)
12int main(void) {13 int delta→ 5 = 5;14 struct Point point→ (empty) = {3, 4};1516 moveRight(&point(empty), delta5);point->x ← 8
8void moveRight(struct Point *point⟨addr A⟩, int delta5) {9 point->x→ 8 = point->x + delta5;10}moveRight(&point, delta);
16 moveRight(&point(empty), delta5);1718 printf("x=%d y=%d\n", point(empty).x, point.y);19 return 0;20}outputx=8 y=4
delta ← 8, point ← (empty)
12int main(void) {13 int delta→ 8 = 8;14 struct Point point→ (empty) = {3, 4};1516 moveRight(&point(empty), delta8);point->x ← 11
8void moveRight(struct Point *point⟨addr A⟩, int delta8) {9 point->x→ 11 = point->x + delta8;10}moveRight(&point, delta);
16 moveRight(&point(empty), delta8);1718 printf("x=%d y=%d\n", point(empty).x, point.y);19 return 0;20}outputx=11 y=4