繁体   English   中英

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

[英]Difference between array[n] and array[]?

例如,之间有什么区别吗?

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的任何东西。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM