A dynamically allocated buffer can be filled through pointer arithmetic.

Dynamic Buffer

dynamic_buffer.c
#include <stdio.h>
#include <stdlib.h>

int main(void) {
    int count = ;
    int *items = (int *)malloc((size_t)count * sizeof(int));
    int *cursor = items;
    int sum = 0;

    for (int i = 0; i < count; i++) {
        *cursor = i + 1;
        sum += *cursor;
        cursor++;
    }

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

int main(void) {
    int count = ;
    int *items = (int *)malloc((size_t)count * sizeof(int));
    int *cursor = items;
    int sum = 0;

    for (int i = 0; i < count; i++) {
        *cursor = i + 1;
        sum += *cursor;
        cursor++;
    }

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

int main(void) {
    int count = ;
    int *items = (int *)malloc((size_t)count * sizeof(int));
    int *cursor = items;
    int sum = 0;

    for (int i = 0; i < count; i++) {
        *cursor = i + 1;
        sum += *cursor;
        cursor++;
    }

    free(items);
    printf("sum=%d\n", sum);
    return 0;
}
heap buffer `malloc` returns storage whose lifetime continues until `free`.
pointer cursor A pointer can move across array elements while the original pointer is kept for cleanup.