C中数组的范围

时间:2015-02-01 13:56:42

标签: c arrays algorithm

我想出了一个算法,我想问一些问题。有没有办法在数组中设置一系列值?

例如

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

并使用循环来增加每次传递的起始值。

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]);
    }
}

那么有没有办法使用上面的C -pseudocode设置每个数组的值范围?

2 个答案:

答案 0 :(得分:2)

不,C没有内置这样的功能。此外,一旦将数据传递给函数(所谓的“衰减到指针”),就没有获得数组上边界的功能。

此问题有两种标准解决方案:

  • 将指针传递给第一个数组元素和元素计数,或
  • 将指针传递给整个数组,初始元素的索引和最后一个元素的索引

第一种方法如下:

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);

第二种方法看起来像这样:

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);

答案 1 :(得分:1)

没有办法使用你用来描述你所追求的语法风格。

两种显而易见的方法是提供数组和索引范围(如提到的那样)或使用两个指针指定范围

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

无论您使用哪种方法,您的调用代码都需要确保它提供有效范围。