主题:[讨论]请教数组使用前先初始化的问题
nana_aoe
[专家分:60] 发布于 2010-07-22 16:50:00
这段代码看的不是很清楚,请大家帮我看一下
#include <stdio.h>
#include <stdlib.h>
#define N 20
int a[N];//这里为什么没有初始化?
void gen_random(int upper_bound)
{
int i;
for (i = 0; i < N; i++)
a[i] = rand() % upper_bound;
}
void print_random()
{
int i;
for (i = 0; i < N; i++)
printf("%d ", a[i]);
printf("\n");
}
int main(void)
{
gen_random(10);
print_random();
return 0;
}
下面还有一个小的程序
#include <stdio.h>
#define N 20
int a[N];
void print_array()
{
for(int i=0;i<N;i++)
printf("%d,",a[i]);
}
int main(void)
{
a[N]={0};
print_array();
return 0;
}
这个程序为什么错了, 对初始化这一块理解的还不是很透彻,希望高手给指点一下
最后更新于:2010-07-22 17:23:00
回复列表 (共11个回复)
沙发
咖喱炒饭 [专家分:210] 发布于 2010-07-22 17:06:00
没有规定说使用前一定要初始化啊。
你一定要初始化的话可以使用 int a[N] = {0}; //全部清零
或者 int a[N] = {1,2,3} 之类的。
第二个问题
int main(void)
{
//a[] = {0};
memset(a,0,sizeof(a));
//printf_array();
[color=FF0000]print_array[/color]();
return 0;
}
板凳
nana_aoe [专家分:60] 发布于 2010-07-22 17:23:00
请问你通过验证了嘛?第二个程序你指出的错误是我的笔误,不好意思。
3 楼
nana_aoe [专家分:60] 发布于 2010-07-22 18:11:00
我找到问题了,是我的数组赋值时出错了,没有[color=FF0000]a[]={}[/color]的方式,在数组前一定要加类型 [color=FF0000][color=800000]int a[]={}[/color][/color]
4 楼
Screenager [专家分:840] 发布于 2010-07-22 20:19:00
lz的两个程序中定义的数组a[N]都是全局的,全局变量如果没有显示地初始化,那么编译器将初始化
为0;第二个程序中a[N]={0}不但语法错,也是多余的,因为编译器已经将其初始化了
5 楼
nana_aoe [专家分:60] 发布于 2010-07-23 09:31:00
哦,是这样的啊,我这样理解可不可以,在全局变量里定义了数组自动初始化为全0,
在局部变量里定义数组,数组的值为随机。
6 楼
Screenager [专家分:840] 发布于 2010-07-23 11:49:00
是的
7 楼
cgl_lgs [专家分:21040] 发布于 2010-07-23 13:01:00
[quote]哦,是这样的啊,我这样理解可不可以,在全局变量里定义了数组自动初始化为全0,
在局部变量里定义数组,数组的值为随机。[/quote]
局部定义的静态变量也是会给自动初始化的,只有局部自动变量才是随机的:)
8 楼
sjw903 [专家分:60] 发布于 2010-07-23 18:49:00
全局数组的话,编译器一般都给自动初始化为0
9 楼
alweeq86 [专家分:1170] 发布于 2010-07-24 19:05:00
[quote]lz的两个程序中定义的数组a[N]都是全局的,全局变量如果没有显示地初始化,那么编译器将初始化
为0;第二个程序中a[N]={0}不但语法错,也是多余的,因为编译器已经将其初始化了[/quote]
因为只有数组只有在定义时才允许 int a[N]={0}这种方式初始化
10 楼
nana_aoe [专家分:60] 发布于 2010-07-26 13:26:00
可以详细的区别一下局部定义的静态变量和局部自动变量吗?基础不是很扎实,希望能给解惑一下,最好举个例子。谢谢
我来回复