Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 初始化字符数组-C和C++;_C++_C - Fatal编程技术网

C++ 初始化字符数组-C和C++;

C++ 初始化字符数组-C和C++;,c++,c,C++,C,有人问我这个语法是什么意思: char data[32] = {1}; 但是我不记得它是干什么的,。但我记得它是有效的。 有人能解释一下它的用途吗?这将创建一个包含32个字符的数组。第一个元素将为1,其余元素将设置为零。这是初始化。它将数组的第一个元素的值设置为1(^a,在我选中的ASCII表中),其余元素设置为0(默认值) 在省略的初始值设定项上说明C99标准: 如果括号内列表中的初始值设定项少于元素或成员 用于初始化已知数组的聚合或字符串文字中的更少字符 尺寸大于阵列中的元素,则骨料的剩余

有人问我这个语法是什么意思:

char data[32] = {1};
但是我不记得它是干什么的,。但我记得它是有效的。

有人能解释一下它的用途吗?

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

这是初始化。它将数组的第一个元素的值设置为
1
^a
,在我选中的ASCII表中),其余元素设置为
0
(默认值)

在省略的初始值设定项上说明C99标准:

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

以及:

如果没有显式初始化具有自动存储持续时间的对象, 它的价值是不确定的。如果具有静态存储持续时间的对象是 未显式初始化,则:

  • 如果有指针类型,则初始化为空指针
  • 如果它有算术类型,则初始化为(正或无符号)零
  • 如果是聚合,则根据这些规则(递归地)初始化每个成员
  • 如果它是一个联合,那么第一个命名成员将根据以下规则(递归)初始化 规则

而且
char
是一种算术类型,因此数组的其余元素将被初始化为零。

是的,您可以正确地回忆。只需谷歌搜索“C数组初始化”:

几点注意:

  • 在旧的、ANSI之前的C编译器中,您不能总是提供 函数内部“局部”数组的初始值设定项;你只能 初始化“全局”数组,即任何函数之外的数组。那些 编译器现在很少见,所以您不必担心这一点 再也没有区别了

  • 当数组定义包含初始值设定项时,数组 维度可以省略,编译器将推断维度 从初始值设定者的数量

  • 如果数组中的初始值设定项少于元素,则 其余元素将自动初始化为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;
    }
    

如果您根本不初始化自动数组(本地数组和非静态数组),那么数组的元素可能包含垃圾值

#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;
}
但是,如果您确实初始化了它,它将使用您指定的初始值设定项进行初始化。如果初始值设定项的数目小于数组中元素的总数,则其余元素将被初始化为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;
}

你的问题的标题基本上就是你的答案。你必须把每个元素都打印在自己的行上吗?@ColinD不,但是这有什么区别呢?这会让你的答案不必要太长。足够长的时间,我必须滚动阅读所有内容,但内容没有足够的意义,不想滚动。好的,我将减小数组的大小。这将使答案更短。
data[0] = 1
data[1] = 0
data[2] = 0
data[3] = 0
data[4] = 0