我不确定该术语是否实际上是“阵列加法”。
我正在尝试了解以下行的内容:
int var[2 + 1] = {2, 1};
与int var[3]
有什么不同?
我已经使用Java好几年了,所以如果使用Java友好的词语解释我会很感激。
编辑:感谢所有帮助过我的人,Occam的剃刀适用于此。
答案 0 :(得分:8)
没有什么不同。 C ++允许在数组声明的下标中使用表达式(甚至是非常量表达式)(有一些限制;除了多维数组上的初始下标之外的任何东西都必须是常量)。
int var[]; // illegal int var[] = {2,1}; // automatically sized to 2 int var[3] = {2,1}; // equivalent to {2,1,0}: anything not specified is zero int var[3]; // however, with no initializer, nothing is initialized to zero
您正在阅读的代码可能会写2 + 1
而不是3
,以提醒您有意跟踪0
。
答案 1 :(得分:0)
与
int var[3]
有什么不同?
我无法看到。
答案 2 :(得分:0)
与int var[3]
有任何不同。编译器将评估2 + 1
并在编译期间将其替换为3
。
答案 3 :(得分:0)
var[2 + 1]
与var[3]
没有区别。作者可能想强调var数组将包含2个数据项和一个终止零。
答案 4 :(得分:0)
没有任何不同;它是int var[3]
。
有人可能在编写char
数组时编写这样的数组,以便为终止0
添加空间。
char four[4 + 1] = "1234";
使用int
数组似乎没有任何意义。
答案 5 :(得分:0)
这将创建一个包含3个整数的数组。你是对的,只要值是编译时常量,你是否将其表示为2 + 1
或3
没有区别。
=
的右侧是初始化列表,它告诉编译器如何填充数组。第一个值为2
,第二个1
,第三个值为0
,因为不再指定值。
只有在使用初始化列表时才会发生零填充。否则,无法保证数组具有任何特定值。
我已经看到这个用char数组完成,强调一个char
是为字符串终止符保留的,但从不为int
数组保留。