回 帖 发 新 帖 刷新版面

主题:[讨论]请教数组使用前先初始化的问题

这段代码看的不是很清楚,请大家帮我看一下
#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;
}
这个程序为什么错了,  对初始化这一块理解的还不是很透彻,希望高手给指点一下

回复列表 (共11个回复)

沙发


没有规定说使用前一定要初始化啊。

你一定要初始化的话可以使用 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;
}

板凳


请问你通过验证了嘛?第二个程序你指出的错误是我的笔误,不好意思。

3 楼

我找到问题了,是我的数组赋值时出错了,没有[color=FF0000]a[]={}[/color]的方式,在数组前一定要加类型 [color=FF0000][color=800000]int a[]={}[/color][/color]

4 楼

lz的两个程序中定义的数组a[N]都是全局的,全局变量如果没有显示地初始化,那么编译器将初始化
为0;第二个程序中a[N]={0}不但语法错,也是多余的,因为编译器已经将其初始化了

5 楼

哦,是这样的啊,我这样理解可不可以,在全局变量里定义了数组自动初始化为全0,
在局部变量里定义数组,数组的值为随机。

6 楼

是的

7 楼

[quote]哦,是这样的啊,我这样理解可不可以,在全局变量里定义了数组自动初始化为全0,
在局部变量里定义数组,数组的值为随机。[/quote]
局部定义的静态变量也是会给自动初始化的,只有局部自动变量才是随机的:)

8 楼

全局数组的话,编译器一般都给自动初始化为0

9 楼

[quote]lz的两个程序中定义的数组a[N]都是全局的,全局变量如果没有显示地初始化,那么编译器将初始化
为0;第二个程序中a[N]={0}不但语法错,也是多余的,因为编译器已经将其初始化了[/quote]
因为只有数组只有在定义时才允许 int a[N]={0}这种方式初始化

10 楼

可以详细的区别一下局部定义的静态变量和局部自动变量吗?基础不是很扎实,希望能给解惑一下,最好举个例子。谢谢

我来回复

您尚未登录,请登录后再回复。点此登录或注册