我不能在其他功能中使用数组?

时间:2016-12-10 20:13:27

标签: c arrays function

我正在编写一个程序来打印数组中的数字,然后使用函数将数组拆分为奇数和偶数。我已完成此部分,然后我必须将每个奇数和偶数数组发送到另一个函数,该函数计算每个数组中的最大数字并返回计算值。似乎主要功能中缺少一些东西。

#include <stdio.h>

void split();
int largest(int arr[]);

int main() {
  int a[11] = {2, 4, 5, 6, 7, 1, 8, 3, 9, 14, 17};
  printf("the values of the array is :\n");
  for (int i = 0; i < 11; i++) {
    printf("%d ", a[i]);
  }
  split();
  int z = largest(odd);
  printf("the max value in odd array is :%d\n", z);
}

void split() {
  int i, evenNumber = 0, oddNumber = 0;
  int even[11], odd[11];
  int a[11] = {2, 4, 5, 6, 7, 1, 8, 3, 9, 14, 17};
  for (i = 0; i < 11; i++) {
    if (a[i] % 2 == 0) {
      even[evenNumber++] = a[i];
    } else {
      odd[oddNumber++] = a[i];
    }
  }
  printf("\nEven :\n");
  for (i = 0; i < evenNumber; i++) {
    printf("%d ", even[i]);
  }
  printf("\nOdd :\n");
  for (i = 0; i < oddNumber; i++) {
    printf("%d ", odd[i]);
  }
}

int largest(int odd[]) {
  int max;
  max = odd[0];
  for (int i = 0; i < 11; i++) {
    if (max < odd[i]) {
      max = odd[i];
    }
  }
  return max;
}

1 个答案:

答案 0 :(得分:1)

你实际上可以在其他函数中使用数组。但是,您遇到的问题是范围。

问题

print("Pet's age is: " + str (item.get_pet_age())) 函数

main

int main () { int a[11] = {2,4,5,6,7,1,8,3,9,14,17}; printf("the values of the array is :\n"); for (int i = 0 ; i<11 ; i++){ printf("%d ",a[i]); } split(); int z = largest(odd); printf("the max value in odd array is :%d\n",z); } 使用变量int z = largest(odd);。但是,odd中永远不会定义odd。相反,mainodd范围内定义。

您似乎认为,因为您在主电话中呼叫split(),因此在您致电split()后,您将能够在odd中访问main事实并非如此。即使在split()中定义oddsplit()中也只定义了 。因此即使split()调用mainsplit()仍未定义odd

这是因为变量仅限于定义它的范围。如果在函数中定义了变量(即函数是其作用域),则只能在该函数内访问它,即使该函数在其他地方使用。如果你想在定义它的函数之外使用一个变量,你必须以某种方式&#34; return&#34;来自函数的变量。

我强烈建议您阅读有关&#34;范围&#34;在C中工作,例如this tutorial

解决方案

您有两个主要选择:

  • 重写main以某种方式返回split()
  • odd的内容移至split()。即不要让main成为一个单独的职能部门。

除非您有将split()作为单独功能保留的具体原因,否则我强烈建议您将其内容移至split()。否则,您必须传递多个参数作为参考,以使main按您希望的方式工作。

如果我们将split()的内容移动到split()(并进行必要的调整以删除重复的变量),这就是新代码的样子:

main

还有一条评论:

无论何时将数组传递给函数,都应该始终传递数组的长度。例如:

#include <stdio.h>

int largest(int arr[]);

int main() {
    int a[11] = { 2, 4, 5, 6, 7, 1, 8, 3, 9, 14, 17 };

    printf("the values of the array is :\n");
    for (int i = 0; i < 11; i++) {
        printf("%d ", a[i]);
    }

    int evenNumber = 0, oddNumber = 0;
    int even[11], odd[11];

    for (int i = 0; i < 11; i++) {
        if (a[i] % 2 == 0) {
            even[evenNumber++] = a[i];
        } else {
            odd[oddNumber++] = a[i];
        }
    }

    printf("\nEven :\n");
    for (int i = 0; i < evenNumber; i++) {
        printf("%d ", even[i]);
    }

    printf("\nOdd :\n");
    for (int i = 0; i < oddNumber; i++) {
        printf("%d ", odd[i]);
    }

    int z = largest(odd);
    printf("the max value in odd array is :%d\n", z);

}

int largest(int odd[]) {
    int max = odd[0];

    for (int i = 0; i < 11; i++) {
        if (max < odd[i]) {
            max = odd[i];
        }
    }

    return max;
}

然后你会像这样打电话给int largest(int odd[], int len) { int max = odd[0]; for (int i = 0; i < len; i++) { if (max < odd[i]) { max = odd[i]; } } return max; }

largest(int[], int)