0

我写了以下一段代码:

#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,但我得到的是:

在此处输入图像描述

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

4

3 回答 3

1

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]);
    }
}
于 2012-10-19T10:14:34.947 回答
0

您调用的两个函数main()都有自己的数组副本,名为array.

结果,函数进行的初始化DeclareAndInitArray()在其他函数中不可见。

要解决此问题,您可以:

1) 将数组声明为全局的,这样两个函数都可以访问同一个数组。

2)声明数组main()并将其传递给两个函数。

于 2012-10-19T10:15:36.807 回答
0

Jerry Cain 在斯坦福 CS107 - Programming Paradigms中提到了 C 语言中的 Channeling 的想法。

在我的机器(macBook)上输出从 0 开始到 99,您可以打印数组的地址。

我认为要打印的数组的地址小于第一个数组。这就是为什么输出前两个数字是随机数的原因。

于 2016-06-22T03:50:01.310 回答