我写了一段代码:
#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,但我得到的是:
有人可以告诉我一开始这两个价值是什么,为什么会来?
答案 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,你可以打印数组的地址。
我认为要打印的数组的地址小于第一个数组。 这就是输出前两个数字是随机数的原因。