初始化char数组 - C和C++

kak*_*ush -2 c c++

我被问到这个语法是什么意思:

char data[32] = {1};
Run Code Online (Sandbox Code Playgroud)

但是我不记得它做了什么.但我记得它是有效的.
有谁可以解释它的目的?

mat*_*975 8

这将创建一个包含32个字符的数组.第一个元素为1,其余元素为零.


Sus*_*Pal 7

如果您根本没有初始化自动数组(本地而非静态),则数组的元素可能包含垃圾值.

#include <stdio.h>

int main(int argc, char **argv)
{
    int i;
    char data[5];
    for (i = 0; i < 5; i++) {
        printf("data[%d] = %d\n", i, data[i]);
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

data[0] = 72
data[1] = 12
data[2] = -118
data[3] = 51
data[4] = -119
Run Code Online (Sandbox Code Playgroud)

但是,如果您初始化它,它将使用您指定的初始值设定项进行初始化.如果初始值设定项的数量小于数组中元素的总数,则其余元素将初始化为0.

#include <stdio.h>

int main(int argc, char **argv)
{
    int i;
    char data[5] = {1};
    for (i = 0; i < 5; i++) {
        printf("data[%d] = %d\n", i, data[i]);
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

data[0] = 1
data[1] = 0
data[2] = 0
data[3] = 0
data[4] = 0
Run Code Online (Sandbox Code Playgroud)

  • @ColinD不,但这有什么不同? (4认同)