【发布时间】:2010-09-14 15:10:37
【问题描述】:
我不确定该术语是否实际上是“数组加法”。
我试图了解以下行的作用:
int var[2 + 1] = {2, 1};
这与int var[3] 有何不同?
我已经使用 Java 好几年了,如果能用 Java 友好的词语解释一下,我将不胜感激。
编辑:非常感谢所有帮助过我的人,奥卡姆剃刀法则在这里适用。
【问题讨论】:
我不确定该术语是否实际上是“数组加法”。
我试图了解以下行的作用:
int var[2 + 1] = {2, 1};
这与int var[3] 有何不同?
我已经使用 Java 好几年了,如果能用 Java 友好的词语解释一下,我将不胜感激。
编辑:非常感谢所有帮助过我的人,奥卡姆剃刀法则在这里适用。
【问题讨论】:
没有什么不同。 C++ 允许在数组声明的下标中使用表达式(甚至是非常量表达式)(有一些限制;除了多维数组的初始下标之外的任何内容都必须是常量)。
int var[]; // 非法的
int var[] = {2,1}; // 自动调整为 2
int var[3] = {2,1}; // 等价于 {2,1,0}:任何未指定的都为零
整数变量[3]; // 然而,没有初始化器,没有任何东西被初始化为零
也许您正在阅读的代码写入 2 + 1 而不是 3,以提醒您后面的 0 是故意的。
【讨论】:
它与int var[3] 有任何不同。编译器将评估2 + 1 并在编译期间将其替换为3。
【讨论】:
这与
int var[3]有何不同?
我看不到。
【讨论】:
没有什么不同;是int var[3]。
在编写char 数组时,有人可能会这样写他们的数组,以便为终止的0 添加空间。
char four[4 + 1] = "1234";
使用int 数组似乎没有任何意义。
【讨论】:
var[2 + 1] 与var[3] 没有区别。作者可能想强调 var 数组将包含 2 个数据项和一个终止零。
【讨论】:
这将创建一个由 3 个整数组成的数组。你说得对,表达为2 + 1或3没有区别,只要值是编译时常数即可。
= 的右侧是一个初始化列表,它告诉编译器如何填充数组。第一个值是2,第二个是1,第三个是0,因为没有指定更多值。
零填充仅在您使用初始化列表时发生。否则无法保证该数组具有任何特定值。
我已经看到使用 char 数组完成此操作,以强调一个 char 是为字符串终止符保留的,但绝不是为 int 数组保留的。
【讨论】: