【问题标题】:Use of Curly Brackets (Braces) Around a variable C++在变量 C++ 周围使用花括号(大括号)
【发布时间】:2014-05-31 23:59:33
【问题描述】:

我正在我的编程课上学习二维数组。我的老师在没有解释的情况下使用了一些东西,我很好奇我们为什么要使用它。由于它与符号有关,我不知道如何用谷歌搜索或搜索它,因为这些符号用于搜索本身。反正代码是这样的:

int small[26]= {0}, large[26]={0}, i;

为什么 0 周围需要花括号?

此代码是其中一部分的程序检查文件并查找字母表中的每个字母并单独计算它们。

【问题讨论】:

  • 与其问为什么需要花括号,不如问为什么需要0。它不是。你这里有一个初始化器,它使用指定的值(如果有)来初始化数组的相应项,并将数组的其余部分初始化为零(或类型的默认值)。
  • 好吧,不过,它们的用途是什么?
  • 这些不是二维数组,只是普通的 C 样式数组。
  • 另外0 是一个整数文字;不是变量。

标签: c++ initialization declaration curly-braces


【解决方案1】:

可以写得更简单

int small[26]= {}, large[26]={}, i;

在这种数组的情况下,大括号表示初始化列表。

假设您要定义一个包含元素 1、2、3、4、5 的数组。

你可以写

int a[5];

a[0] = 1;
a[1] = 2;
a[2] = 3;
a[3] = 4;
a[4] = 5;

但是,C++ 允许在定义数组时为其分配元素。等效记录将看起来

int a[5] = { 1, 2, 3, 4, 5 };

如果有小于数组大小的初始化器,则剩余元素将被初始化为零。例如

int a[5] = { 1, 2 };

在这种情况下 a[0] 将等于 tp 1 a[1] 将等于 2 并且所有其他元素将等于 0。

您可以省略数组的大小。例如

int a[] = { 1, 2, 3, 4, 5 };

在这种情况下,编译器将分配与初始化器列表中的初始化器一样多的数组元素。

记录(仅在 C++ 中有效。在 C 中是不允许的)

int a[5] = {};

等价于

int a[5] = { 0 };

即数组的所有元素都将初始化为 0。在最后一条记录中,第一个元素显式初始化为零,所有其他元素也初始化为零,因为它们在初始化器列表中的初始化器未指定。

同样的方式你也可以初始化标量对象。例如

int x = { 10 };

对于标量对象,您只能指定一个初始化程序的唯一区别。你甚至可以在没有赋值运算符的情况下编写

int x { 10 };

你也可以写

int x {};

在这种情况下,x 将被初始化为 0。

【讨论】:

  • 当我第一次在 C++ 教程中看到 int x { 10 }; 这种表达方式时,我非常困惑。 C++,你为什么要允许这个?!
【解决方案2】:
int Array[26]= {0};

将该数组中的所有元素初始化为 0。

正如 BryanChen 在下面提到的:

Note: int Array[26]= {1}; will initialize first element to 1 and others to 0. 

【讨论】:

  • 注意:int Array[26]= {1}; 会将第一个元素初始化为 1,其他元素初始化为 0。
  • 如何将所有值初始化为 1?
  • 要么 int Array[26] = { 1,1,1,1,1 ...} 有 26 个 1,要么创建一个循环来计算您需要的确切数字。
【解决方案3】:

默认情况下,本地范围的常规数组(例如,在函数中声明的数组)未初始化。这意味着它的任何元素都没有设置为任何特定值。它们的内容在声明数组时是不确定的。

但数组中的元素可以在声明时显式初始化为特定值,方法是将这些初始值括在大括号 {} 中。

【讨论】:

    【解决方案4】:

    注意

    int array [constant] = {};
    

    默认初始化所有值。 int 的默认初始值设定项是 0。

    int small[26]= {0};
    

    将第一个数字设置为 0,默认初始化其余数字。

    一般:

    int array [constant] = {value initialize all indices listed here, 
                            the rest are default initialized};
    

    【讨论】:

      猜你喜欢
      • 2016-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-25
      • 2018-05-02
      • 2014-11-26
      • 1970-01-01
      相关资源
      最近更新 更多