array [n]和array []之间的区别?

时间:2011-08-31 22:56:11

标签: c++ c arrays

之间是否有任何区别,例如

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

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

编译器需要自己计算第一种情况下的元素数量,这可能需要一些时间({...}的1234332534个元素),所以第二种情况比第一种情况有效吗?

5 个答案:

答案 0 :(得分:8)

此数组声明:

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

与:

完全相同
int array[5] = {1, 2, 3, 4, 5}; 

元素的数量是在编译时计算的,因此没有与之相关的运行时成本。

第一个声明的优点是它不需要程序员手动计算元素的数量,因此在这个意义上它是一个更有效的数组声明。

答案 1 :(得分:5)

只要[]之间的显式元素数与{}之间的初始值设定项数相同,就没有区别。

关于“效率”的问题没有实际意义。数组大小在编译时确定,这意味着它对代码的效率没有影响。而且无论如何编译器都必须解析初始化列表,它对编译的效率没有实际影响。

答案 2 :(得分:2)

  1. 最终结果没有区别;仍然,第一种形式更容易编写和维护,因为您不必手动计算元素。
  2. 编译器可能必须对元素进行计数:它必须检测它们是否更多,因为它是编译错误,如果它们更少,则其他元素必须初始化为零。
  3. 无论如何,这样的计数是在编译时完成的,因此对生成的可执行文件的性能没有影响。
  4. 一般来说,你永远不会在堆栈上创建非常大的数组或者作为全局数据(因为通常大的堆栈分配失败,而大数组作为全局变量会导致巨大的可执行文件)。
  5. 即使您设法让编译器接受1234332534元素的静态/本地数组,元素的计数也可能是此编译的最后一个性能问题。

  6. †。另一方面,大型全局阵列是二进制资源经常被包含在固件中以便闪存到嵌入式设备上的方式。但我不认为任何人都会认为这种蛮力方法适用于大于几MB的任何东西。

答案 3 :(得分:1)

没有区别,除了你,程序员,你不必确定数组中有多少元素。编译器仍然会计算元素以分配适当的数量,因此两者都需要编译器相同的编译时间。

答案 4 :(得分:0)

在第二种情况下,如果给出错误的值来初始化内存,预编译器将捕获错误。这就是它。