C中通道的程序输出

时间:2012-10-19 10:12:14

标签: c memory

我写了一段代码:

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

enter image description here

有人可以告诉我一开始这两个价值是什么,为什么会来?

3 个答案:

答案 0 :(得分: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]);
    }
}

答案 1 :(得分:0)

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

由于函数DeclareAndInitArray()所做的结果初始化在另一个函数中不可见。

要解决此问题,您可以:

1)使数组的声明为全局,以便该函数都可以访问同一个数组。

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

答案 2 :(得分:0)

Jerry Cain在Stanford CS107 - Programming Paradigms中提到了C语言中的引导思想。

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

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