之间是否有任何区别,例如
int array[]={1, 2, 3, 4, 5};
和
int array[5]={1, 2, 3, 4, 5};
编译器需要自己计算第一种情况下的元素数量,这可能需要一些时间({...}
的1234332534个元素),所以第二种情况比第一种情况有效吗?
答案 0 :(得分:8)
此数组声明:
int array[] = {1, 2, 3, 4, 5};
与:
完全相同int array[5] = {1, 2, 3, 4, 5};
元素的数量是在编译时计算的,因此没有与之相关的运行时成本。
第一个声明的优点是它不需要程序员手动计算元素的数量,因此在这个意义上它是一个更有效的数组声明。
答案 1 :(得分:5)
只要[]
之间的显式元素数与{}
之间的初始值设定项数相同,就没有区别。
关于“效率”的问题没有实际意义。数组大小在编译时确定,这意味着它对代码的效率没有影响。而且无论如何编译器都必须解析初始化列表,它对编译的效率没有实际影响。
答案 2 :(得分:2)
†。另一方面,大型全局阵列是二进制资源经常被包含在固件中以便闪存到嵌入式设备上的方式。但我不认为任何人都会认为这种蛮力方法适用于大于几MB的任何东西。
答案 3 :(得分:1)
没有区别,除了你,程序员,你不必确定数组中有多少元素。编译器仍然会计算元素以分配适当的数量,因此两者都需要编译器相同的编译时间。
答案 4 :(得分:0)
在第二种情况下,如果给出错误的值来初始化内存,预编译器将捕获错误。这就是它。