C编程,int a [N] = {0};这句话的意义?

时间:2016-05-15 11:17:37

标签: c arrays initialization

对于着名的问题。

有100个人站在一个从1到100的圆圈中。第一个人拿着一把剑并且顺时针杀死站在他旁边的人,即1杀2,依此类推。哪个是最后一个还活着?最后一个号码站在哪一个?

在此问题的以下C代码中。

void main(){
    int i=0, j; //i has the sword, j gets killed.
    int a[N]={0}; //0=not killed
    while(1){
        if(i != N-1) j = i + 1;
        else j = 0;
        while(a[j])
            if((j + 1) == N) j = 0; //loop back to 0
            else j++; //skip over the killed people
        if(i==j){ //if i is the only one left, stop
            printf("\n\n\n%d is left!", i+1);
            return;
        }
        a[j] = 1; //kill j
        printf(" %d kills %d.", i+1, j+1);
        if(j != N-1) i = j + 1;
        else i=0;
        while(a[i])
            if((i + 1) == N) i = 0;
            else i++;
    }
}

请告诉我int a[N]={0}; // 0 =未在行中被杀的含义。 6谢谢。

3 个答案:

答案 0 :(得分:2)

在您的代码中,

 int a[N]={0};

正在将所有数组a的成员初始化为0.

根据C11标准,章节§6.7.9,初始化,(强调我的

  

如果括号括起的列表中的初始值设定项少于元素或成员   用于初始化已知数组的字符串文字中的聚合或更少字符   大小比数组中的元素大,聚合的其余部分应为   隐式初始化与具有静态存储持续时间的对象相同。

,对于静态存储类型int的初始化值,算术类型

  

[...]如果它有算术类型,则初始化为(正或无符号)零;

aint类型的数组,因此它将所有成员初始化为0作为值。 a[0]将显式初始化为0(已提供),其余的将获得隐式初始化。

FWIW,N必须是编译时常量值,如

#define N 50 //or any value

让这个工作。

答案 1 :(得分:1)

它基本上告诉编译器这将是一个大小为N的数组,并且都将被初始化为零。因此,当您尝试显示此数组的输出时,您将看到N个零。

答案 2 :(得分:0)

有点类似于:

memset(a, 0, N * sizeof(int))