C++数组初始化

oo7oh9g9  于 2022-12-30  发布在  其他
关注(0)|答案(5)|浏览(191)

是将数组初始化为全0的一种形式
char myarray[ARRAY_SIZE] = {0}是否受所有编译器支持?
如果有,是否有与其他类型类似语法?例如

bool myBoolArray[ARRAY_SIZE] = {false}
zf9nrax1

zf9nrax11#

是的,所有的C编译器都支持这种形式的初始化。它是 C 的一部分。事实上,它是从C语言到C的一个习惯用法。在C语言中,= { 0 }是一个习惯用法的“通用零初始化器”。在C中,“几乎”也是如此。
因为这个初始化器是通用的,所以对于bool数组,您实际上不需要不同的“语法”。0也可以作为bool类型的初始化器,所以

bool myBoolArray[ARRAY_SIZE] = { 0 };

保证使用false初始化整个数组。

char* myPtrArray[ARRAY_SIZE] = { 0 };

in保证使用char *类型的空指针初始化整个数组。
如果您认为它可以提高可读性,当然可以使用

bool myBoolArray[ARRAY_SIZE] = { false };
char* myPtrArray[ARRAY_SIZE] = { nullptr };

但关键是= { 0 }变体给你 * 完全 * 相同的结果。
然而,在C++中,= { 0 }可能并不适用于所有类型,例如枚举类型,它不能用整数0初始化。

T myArray[ARRAY_SIZE] = {};

这将默认初始化任何类型的数组(假设元素允许默认初始化),这意味着对于基本(标量)类型,整个数组将被正确地零初始化。

flvtvl50

flvtvl502#

请注意,在C++11通用初始化语法中,“=”是可选的,并且通常被认为是更好的编写风格:

char myarray[ARRAY_SIZE] {0}
zhte4eai

zhte4eai3#

是的,我相信它应该工作,它也可以应用于其他数据类型。
对于类数组,如果初始化器列表中的项比数组中的元素少,则默认构造函数用于剩余的元素。如果没有为类定义默认构造函数,则初始化器列表必须是完整的-也就是说,数组中的每个元素都必须有一个初始化器。

d8tt03nd

d8tt03nd4#

在C++中可以用以下几种方法声明数组。如果你知道数组的大小,那么你应该声明数组:整数:int myArray[array_size];双精度:double myArray[array_size];字符和字符串:char myStringArray[array_size];字符和字符串之间的区别如下

char myCharArray[6]={'a','b','c','d','e','f'};
char myStringArray[6]="abcdef";

如果你不知道数组的大小,那么你应该像下面这样把数组留空。
整数:int myArray[array_size];
双人间:double myArray[array_size];

ego6inou

ego6inou5#

此外,如果不显式初始化arrayvector,请注意它们是如何默认初始化的。

int main()
{
    bool arr1[3];                   // true  true  true  [here true is SOME garbage value] 
    std::vector<bool> vec1(3);      // false false false

    bool arr2[3] = { true };        // true false false [here true/false are REAL true/false values] 
    vector<bool> vec2(3, true);     // true true  true

    bool arr3[3] = { false };         // false false false
    std::vector<bool> vec3(3, false); // false false false

    int arr4[3];                      // GV GV GV - garbage value
    std::vector<int> vec4(3);         // 0 0 0

    int arr5[3] = { 1 };              // 1 0 0
    std::vector<int> vec5(3, 1);      // 1 1 1

    int arr6[3] = { 0 };              // 0 0 0
    std::vector<int> vec6(3, 0);      // 0 0 0
}

相关问题