【问题标题】:C++ array declaration and initializationC++ 数组声明和初始化
【发布时间】:2017-10-24 12:46:57
【问题描述】:

在观看演讲者使用的教程时

int deca['f' + '9' + 2 ] = {0};

我从未在任何其他 C++ 教程中看到过这个,他们没有解释它的含义,当我尝试在我的计算机上实现它时,出现了一个错误。

作为参考,它们位于 Linux 环境中。

【问题讨论】:

  • 出现了什么错误?
  • 可以分享一下教程的参考吗?
  • 你遇到了什么错误? Works just fine here
  • 您的问题的标题可能具有误导性,因为您提供的代码行声明了一个数组,而不是一个向量。
  • 'f' 是 102 的另一种表示形式,'9' 是 57 的另一种表示形式。所以。 'f' + '9' + 2 等于 161。int deca['f' + '9' + 2 ] 实例化一个包含 161 个元素的数组。这不是向量

标签: c++ vector


【解决方案1】:

它只是声明了一个包含N 元素的整数数组并将其初始化为零。 N 的计算结果由 'f' + '9' + 2 表达式确定。如果您使用的是 ASCII 代码页,则计算结果为 161;如果您使用不同的代码页,则计算结果为其他内容。每个字符文字都有其对应的整数值,具体取决于使用的编码。在 ASCII 代码页中,字符 'f' 由多个 102 表示,字符 '9' 的值为 57。表达式变为102 + 57 + 2,等于161。在其他代码页中,这些字符可能具有其他值。相当于:

int deca[161] = { 0 };  // If ASCII code page is used

【讨论】:

  • 只有当您的系统使用 ASCII 时才会这样,这不能保证see related question
  • @Borgleader 确实如此。更新了答案。
  • 我认为您的意思是编码,而不是代码页。这两个术语意味着不同的东西。例如,一台机器不需要支持 code pages 以具有 encoding
  • @HWalters 我认为你是对的。我已经更新了答案。
猜你喜欢
  • 1970-01-01
  • 2021-04-15
  • 1970-01-01
  • 2018-05-20
  • 2011-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-01
相关资源
最近更新 更多