Range within an array in C

12,777

Solution 1

No, C does not have such functionality built in. Moreover, there is no functionality to get the upper boundary of an array once you pass it to a function (so called "decaying to pointers").

There are two standard solutions to this problem:

  • Pass a pointer to the first array element and the count of elements, or
  • Pass a pointer to the whole array, an index to the initial element, and an index to the last element

The first approach would look like this:

int sum_array(int* array, size_t len) {
    int res = 0;
    for (size_t i = 0 ; i != len ; i++) {
        res += array[i];
    }
    return res;
}
...
int ProfitA = sum_array(array, A);
int ProfitB = sum_array(array+A, B);
int ProfitC = sum_array(array+A+B, N-A-B);

the second approach would look like this:

int sum_array(int* array, int first, int last) {
    int res = 0;
    for (int i = first ; i <= last ; i++) {
        res += array[i];
    }
    return res;
}
...
int ProfitA = sum_array(array, 0, A-1);
int ProfitB = sum_array(array, A, A+B-1);
int ProfitC = sum_array(array, A+B, N-1);

Solution 2

There isn't a way using the style of syntax you used to describe what you're after.

Two obvious ways would be to provide the array and indices range (as lared mentioned) or specify the range using two pointers

int ProfitB = Sum(array + A, array + A+B-1);   /* sum array[A] ... array[A+B-1] */

Whichever approach you use, your calling code would need to ensure it provides a valid range.

Share:
12,777
Nikos KLon
Author by

Nikos KLon

Updated on June 04, 2022

Comments

  • Nikos KLon
    Nikos KLon almost 2 years

    I came up with an algorithm and I wanted to ask something. Is there any way to set a range of values within an array?

    Eg

    int N = 10;
    int array[N] = {2,6,5,9,4,3,5,9,4,9};
    

    and using a loop to increase the start value with each pass.

    for (int A = 1; A < N - 2; A++) {
        for (int B = 1; B < N - 1; B++) {
            int ProfitA = Sum(array[0...A-1]);
            int ProfitB = Sum(array[A...A+B-1]);
            int ProfitC = Sum(array[A+B...N-1]);
        }
    }
    

    So is there any way to set the range of values in each array using the above C -pseudocode?