【问题标题】:C the greatest value in random array, not working properlyC 随机数组中的最大值,不能正常工作
【发布时间】:2016-04-10 14:18:54
【问题描述】:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int array[];
int arraySize = 460;
int max;

int array_size(int n) {
    array[n];
}
int read_from_array(int n){
    for(int i = 0; i <= arraySize-1;i++ )
        printf("%d|",array[i]);
}
int array_generator(int n) {
    for(int i = 0; i <= n; i++)
        array[i] = rand() % 1000;
}
int find_max(int n) {
    for(int i = 0;i <= n-1;i++)
    {
        if(array[i] > max)
            max = array[i];
    }
    printf("\n%d",max);
}

int main(int argc, char** argv) {

    srand(time(NULL));

    array_size(arraySize);
    array_generator(arraySize);
    //read_from_array(arraySize);
    find_max(arraySize);

    return 0;
}

我正在学习并做了这样的事情来找到随机数组中最大的 int 当这个变量设置为

我想知道为什么会发生这种情况以及如何使它变得更好。

【问题讨论】:

  • 您认为array_size[n] 设置了数组大小吗?它没有。照原样,您的数组是空的,所有访问都是未定义的行为。
  • int array[]int array[1]; 相同
  • @CoolGuy,你确定不是int* array吗? (如,没有分配存储空间,只是一个指针。)
  • @Tyler 是的。请参阅我的问题:What do I get if I declare an array without a size in global scope?。我同意它不是 100% 等价的...
  • 为什么需要使用array_size 为什么不直接声明int array[arraysize]?

标签: c arrays


【解决方案1】:

很多东西。

首先,您的数组从未实际分配过。您将所有这些随机整数放入...谁知道在哪里。解决此问题的简单方法是在数组声明后的[] 中添加一个数字。但是要做到这一点,大小必须是一个常数,所以你不能使用像arraySize 这样的变量来设置大小。不过,您可以使用预处理器#define。像这样:

#define ARRAY_SIZE 460
int array[ARRAY_SIZE];

你的 array_size 函数没有做任何事情。

您的所有函数都声明为返回int,但没有return 语句。要么让他们void 要么返回一些东西。

您的max 应该是find_max 中的一个局部变量,并且在您尝试在if 语句中使用它之前应该给它一个值。

int find_max(int n) {
    int max = array[0];
    for(int i = 0;i < n;i++)
    {
        if(array[i] > max)
            max = array[i];
    }
    printf("\n%d",max);
    return max;
}

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void array_init(int* array, int n) {
    for(int i = 0; i < n; i++) {
        array[i] = rand() % 1000;
    }
}

int array_max(int* array, int n) {
    int max = array[0];
    for(int i = 0;i < n;i++)
    {
        if(array[i] > max) {
            max = array[i];
        }
    }
    return max;
}

int main(int argc, char** argv) {
    srand(time(NULL));

    int array_size = 460;
    int array[array_size];

    array_init(array, array_size);
    int max = array_max(array, array_size);
    printf("%d\n", max);
    return 0;
}

【讨论】:

  • "你不能使用像 arraySize 这样的变量来设置大小" -- 继续阅读Variable Length Arrays
  • 我知道。最好保持简单。而且它无论如何都不适用于静态(编辑:“静态分配”例如全局)数组。 stackoverflow.com/questions/15882650/…
  • 所以#define ARRAY_SIZE anyvalue 是一个很好的做法,或者它应该只是从开始 int array[1000];
  • 关于定义的意见各不相同。就个人而言,我会将其重新设计到在main() 中声明和分配数组的位置,并传递给其他函数以供他们修改/处理。给我一秒钟,我会编辑给你看。
  • 当我尝试使 array_size = 520896 或更多时会发生什么?它终止了,是 ram 还是编译器
【解决方案2】:

max 永远不会初始化,并且可能以大于数组最大值的值开始。它应该这样初始化:

#include <limits.h>

int max = INT_MIN ;  // Init. to smallest possible value.

【讨论】:

    猜你喜欢
    • 2011-02-03
    • 2018-10-15
    • 1970-01-01
    • 2016-06-27
    • 1970-01-01
    • 2018-04-09
    • 2010-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多