在c中的main()中使用全局变量

时间:2013-07-02 18:45:15

标签: c arrays extern

我正在尝试使用全局变量,但是当我在main函数中使用它时出现错误。 为什么我不能在主内部使用“extern”?代码块只在这个区域显示错误,所以我发现这是我的代码中的问题,这是编译错误。 我正在使用extern,因为从main()

调用时,我不必将这些数组发送到另一个函数

那么我修改了什么,以便让我的代码工作?

我正在尝试打印整数数组,用rand()初始化。

#include<stdio.h>

int check_error(int);
void initialize_array1(int);
void initialize_array2(int);
void print_array1(int);
void print_array2(int);
int find_max(int , int);

void main(void)
{
    int input1,input2;
    printf("Enter the size of the first input: ");
    scanf("%d",&input1);
    while( (check_error(input1)) == 0)
    {
        printf("Enter the size of the input again: ");
        scanf("%d",&input1);
    }

    printf("Enter the size of the second input: ");
    scanf("%d",&input2);
    while( (check_error(input2)) == 0)
    {
        printf("Enter the size of the input again: ");
        scanf("%d",&input2);
    }
    extern int array1[input1], array2[input2];

    print_array1(input1);
    print_array2(input2);
    find_max(input1,input2);

    printf("\n%d\n",find_max(input1,input2));
}

int check_error(int input)
{
    if(input>0 && input<100)
    {
        return 1;
    }
    else
        return 0;
}

void initialize_array1(int input1)
{
    int i;
    for(i=0;i<input1;i++)
    {
        array1[i] = 0;
    }
}


void initialize_array1(int input2)
{
    int i;
    for(i=0;i<input2;i++)
    {
        array2[i] = 0;
    }
}

void print_array1(int input1)
{
    int i;
    printf(" Input array 1");
    for(i=0;i<input1;i++)
    {
        printf("%d ",array1[i]);
    }
    printf("\n");
}

void print_array2(int input2)
{
    int i;
    printf(" Input array 2");
    for(i=0;i<input2;i++)
    {
        printf("%d ",array2[i]);
    }
    printf("\n");
}

int find_max(int input1, int input2)
{
    int max = 0,i;
    for(i=0;i<input1;i++)
    {
        if(array1[i]>max)
        {
            max = array1[i];
        }
    }
    for(i=0;i<input2;i++)
    {
        if(array2[i]>max)
        {
            max = array2[i];
        }
    }
    return max;
}

2 个答案:

答案 0 :(得分:2)

此代码不正确有两个原因:

  • 您将可变长度数组声明为外部数组。这是不允许的。
  • 即使数组是固定长度的,您也需要在其他地方定义这些数组。

要修复此代码,请使用您希望用户输入的array1大小定义array2max(添加验证以确保输入大小不超过{{ 1}})。

以下是相关主题答案的链接:What are extern variables in C?

答案 1 :(得分:1)

使用extern声明,此变量在其他地方定义。顺便说一下,您通常只在功能块内定义(例如int i;)变量。

其他:声明变量的存在是不够的,它也必须在某处定义(即必须为它留出空间)。

要拥有一个全局变量,至少必须在函数外定义它。

我认为@dasblinkenlight为他的+1答案添加了一个完美的链接!