A loop can visit part or all of an array and accumulate a total.

accumulator An accumulator variable keeps the running result as the loop visits elements.
bounded loop The loop condition keeps array access within the intended range.

Array Sum

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

int main(void) {
    int values[5] = {2, 4, 6, 8, 10};
    int count = 3;
    int sum = 0;

    for (int i = 0; i < count; i++) {
        sum += values[i];
    }

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

int main(void) {
    int values[5] = {2, 4, 6, 8, 10};
    int count = 2;
    int sum = 0;

    for (int i = 0; i < count; i++) {
        sum += values[i];
    }

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

int main(void) {
    int values[5] = {2, 4, 6, 8, 10};
    int count = 5;
    int sum = 0;

    for (int i = 0; i < count; i++) {
        sum += values[i];
    }

    printf("sum=%d\n", sum);
    return 0;
}
  1. values ← ⟨addr A⟩, count ← 3, sum ← 0

    3int main(void) {4    int values→ ⟨addr A⟩[5] = {2, 4, 6, 8, 10};5    int count→ 3 = 3; //@count=2, 56    int sum→ 0 = 0;
  2. sum ← 2

    pass 1 of 3
    8for (int i0 = 0; i < count3; i++) {9    sum→ 2 += values[i]2;10}
    All 3 passes — pass 1 is the card above
    passivalues[i]sum
    1020 2
    2142 6
    3266 12
  3. printf("sum=%d ", sum);

    12    printf("sum=%d\n", sum12);13    return 0;14}
    outputsum=12
  1. values ← ⟨addr A⟩, count ← 2, sum ← 0

    3int main(void) {4    int values→ ⟨addr A⟩[5] = {2, 4, 6, 8, 10};5    int count→ 2 = 2;6    int sum→ 0 = 0;
  2. sum ← 2

    pass 1 of 2
    8for (int i0 = 0; i < count2; i++) {9    sum→ 2 += values[i]2;10}
  3. sum ← 6

    pass 2 of 2
    8for (int i1 = 0; i < count2; i++) {9    sum→ 6 += values[i]4;10}
  4. printf("sum=%d ", sum);

    12    printf("sum=%d\n", sum6);13    return 0;14}
    outputsum=6
  1. values ← ⟨addr A⟩, count ← 5, sum ← 0

    3int main(void) {4    int values→ ⟨addr A⟩[5] = {2, 4, 6, 8, 10};5    int count→ 5 = 5;6    int sum→ 0 = 0;
  2. sum ← 2

    pass 1 of 5
    8for (int i0 = 0; i < count5; i++) {9    sum→ 2 += values[i]2;10}
    All 5 passes — pass 1 is the card above
    passivalues[i]sum
    1020 2
    2142 6
    3266 12
    43812 20
    541020 30
  3. printf("sum=%d ", sum);

    12    printf("sum=%d\n", sum30);13    return 0;14}
    outputsum=30