array[n]与array[]的区别

Difference between array[n] and array[]?

本文关键字:array 区别      更新时间:2023-10-16

有什么区别吗?例如

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

,

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

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

这个数组声明:

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

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

元素的数目是在编译时计算的,所以没有运行时开销。

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

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

关于"效率"的问题是没有意义的。数组大小是在编译时确定的,这意味着它对代码的效率没有影响。因为在任何情况下编译器都必须解析初始化列表,所以它对编译的效率没有真正的影响。

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

。另一方面,大的全局数组是二进制资源通常包含在固件中以闪现到嵌入式设备上的方式。但我认为没有人会考虑使用这种暴力方法来处理大于几mb的内容。

没有区别,只是程序员不必确定数组中有多少个元素。编译器仍然会对元素进行计数以分配适当的数量,因此编译器在编译时所花费的时间长度相同。

在第二种情况下,如果初始化内存的值数量错误,预编译器将捕获错误。