我编写了以下代码:

#include<stdio.h>
#include<stdlib.h>
#define FOR(i,a,b) for(i=a;i<b;i++)

void DeclareAndInitArray();
void PrintArray();

int main(){
    DeclareAndInitArray();
    //printf("hello\n");
    PrintArray();
    return 0;
}

void DeclareAndInitArray(){
    int array[100];
    int i;
    FOR(i,0,100){
        array[i]=i;
    }
}

void PrintArray(){
    int array[100];
    int i;
    FOR(i,0,100){
        printf("%d\t",array[i]);
    }
}


我期望输出从0开始,然后到99,但是我得到的是:



有人可以告诉我这两个值在开始时是什么,为什么会出现?

最佳答案

DeclareAndInitArray()PrintArray()各自使用各自独立的数组。您要在每个函数中分别声明它:

int array[100];


因此,您在PrintArray()中使用的数组尚未初始化,并且包含垃圾。

您需要声明一次数组,然后将其作为参数传递到PrintArray()中。尝试以下方法:

int main(){
    int array[100];
    DeclareAndInitArray(array);
    //printf("hello\n");
    PrintArray(array);
    return 0;
}

void InitArray(int array[]){
    int i;
    FOR(i,0,100){
        array[i]=i;
    }
}

void PrintArray(int array[]){
    int i;
    FOR(i,0,100){
        printf("%d\t",array[i]);
    }
}

09-17 19:29