初始化数组是否在C/C++和类似语言中保留其顺序?

Mau*_*ker 2 c c++ java arrays programming-languages

假设我在C/C++中有一个数组:

int myArray[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
Run Code Online (Sandbox Code Playgroud)

在Java中相同:

int[] myArray = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
Run Code Online (Sandbox Code Playgroud)

和其他编程语言中的等价物一样.

是否保证元素将始终与我在初始化时键入的顺序相同?例如:1, 2, 3, 4, 5, 6, 7, 8, 9, 10.


注意:我已经问过这个特定于Java编程语言的问题,我知道这是真的.但我想知道这种行为是否适用于任何(或大多数)编程语言,我不确定编辑是否是最好的方式.

Bar*_*wen 6

让我们听听C的创作者对此有何看法:

可以通过使用括号括起来并用逗号分隔的初始化列表来跟随其声明来初始化数组.例如,要使用每月的天数初始化数组天数:
int days[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }
当省略数组的大小时,编译器将通过计算初始值来计算长度,在这种情况下,初始值为12.如果数组的初始值设定项少于指定的大小,则外部,静态和自动变量的其他值将为零.拥有太多初始值设定项是错误的.
无法指定初始化程序的重复,也无法在不提供所有前面的值的情况下初始化数组中间的元素.
字符数组是初始化的特例; 可以使用一个字符串而不是大括号和逗号表示法:
char pattern = "ould";是一个较长但速度相同的简写
char pattern[] = { 'o', 'u', 'l', 'd', '\0' };在这种情况下,数组大小为五(四个字符加上终止'\ 0').

C BY BRIAN W KERNIGHAN&DENNIS M RITCHIE,第二版,第95页.