Pointers
Pointer Arithmetic
Pointer arithmetic moves by element positions, not raw byte counts.
element step
`ptr + offset` advances by `offset` elements of the pointed-to type.
array base
An array name can provide a pointer to its first element.
Pointer Arithmetic
pointer_arithmetic.c
Replay: real traced execution (multi-file project)
#include <stdio.h>
int main(void) {
int values[4] = {2, 4, 6, 8};
int offset = 2;
int *base = values;
int item = *(base + offset);
printf("item=%d\n", item);
return 0;
}
#include <stdio.h>
int main(void) {
int values[4] = {2, 4, 6, 8};
int offset = 1;
int *base = values;
int item = *(base + offset);
printf("item=%d\n", item);
return 0;
}
#include <stdio.h>
int main(void) {
int values[4] = {2, 4, 6, 8};
int offset = 3;
int *base = values;
int item = *(base + offset);
printf("item=%d\n", item);
return 0;
}
values ← ⟨addr A⟩, offset ← 2, base ← ⟨addr A⟩, item ← 6
3int main(void) {4 int values→ ⟨addr A⟩[4] = {2, 4, 6, 8};5 int offset→ 2 = 2; //@offset=1, 36 int *base→ ⟨addr A⟩ = values⟨addr A⟩;7 int item→ 6 = *(base⟨addr A⟩ + offset2);89 printf("item=%d\n", item6);10 return 0;11}outputitem=6
values ← ⟨addr A⟩, offset ← 1, base ← ⟨addr A⟩, item ← 4
3int main(void) {4 int values→ ⟨addr A⟩[4] = {2, 4, 6, 8};5 int offset→ 1 = 1;6 int *base→ ⟨addr A⟩ = values⟨addr A⟩;7 int item→ 4 = *(base⟨addr A⟩ + offset1);89 printf("item=%d\n", item4);10 return 0;11}outputitem=4
values ← ⟨addr A⟩, offset ← 3, base ← ⟨addr A⟩, item ← 8
3int main(void) {4 int values→ ⟨addr A⟩[4] = {2, 4, 6, 8};5 int offset→ 3 = 3;6 int *base→ ⟨addr A⟩ = values⟨addr A⟩;7 int item→ 8 = *(base⟨addr A⟩ + offset3);89 printf("item=%d\n", item8);10 return 0;11}outputitem=8