How to initialize an array with a range of numbers in C

1 Answer

0 votes
#include <stdio.h>
#include <stdlib.h>

/* Build a range using a simple for‑loop.
   This is the most common and flexible approach. */
int* make_range_loop(int start, int end) {
    int size = end - start;
    int* values = malloc(size * sizeof(int));

    for (int i = 0; i < size; ++i) {
        values[i] = start + i;
    }

    return values;
}

/* Build a range using pointer arithmetic.
   This keeps the loop tight and expressive. */
int* make_range_pointer(int start, int end) {
    int size = end - start;
    int* values = malloc(size * sizeof(int));

    int* p = values;
    for (int n = start; n < end; ++n) {
        *p++ = n;
    }

    return values;
}

/* Build a range using a fixed-size array.
   No malloc; size known at compile time.
   The caller provides the array and its size. */
void make_range_static(int* arr, int size, int start) {
    /* Fill the array with consecutive integers beginning at 'start'. */
    for (int i = 0; i < size; ++i) {
        arr[i] = start + i;
    }
}

/* Build a range 0..end-1 using a manual loop.
   Included for completeness. */
int* make_range_zero_to_n(int end) {
    int* values = malloc(end * sizeof(int));

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

    return values;
}

/* Print a list for demonstration. */
void print_range(const char* label, const int* values, int size) {
    printf("%s: ", label);
    for (int i = 0; i < size; ++i) {
        printf("%d ", values[i]);
    }
    printf("\n");
}

int main(void) {
    int start = 1;
    int end   = 10;
    int size  = end - start;

    int* a = make_range_loop(start, end);
    int* b = make_range_pointer(start, end);
    int* c = make_range_zero_to_n(end);

    /* Static array option: no malloc */
    int d[10] = {0};  /* initialized to zero; we will overwrite with a range */
    make_range_static(d, 10, 1);

    print_range("loop", a, size);
    print_range("pointer arithmetic", b, size);
    print_range("zero to n", c, end);
    print_range("static array", d, 10);

    free(a);
    free(b);
    free(c);

    return 0;
}


/*
run:

loop: 1 2 3 4 5 6 7 8 9 
pointer arithmetic: 1 2 3 4 5 6 7 8 9 
zero to n: 0 1 2 3 4 5 6 7 8 9 
static array: 1 2 3 4 5 6 7 8 9 10 

*/

 



answered Aug 18 by avibootz
...