初始化数组是不是保留其在 C/C++ 和类似语言中的顺序? [关闭]

Posted

技术标签:

【中文标题】初始化数组是不是保留其在 C/C++ 和类似语言中的顺序? [关闭]【英文标题】:Does an Initialized Array retain its order in C/C++ and similar languages? [closed]初始化数组是否保留其在 C/C++ 和类似语言中的顺序? [关闭] 【发布时间】:2016-03-23 13:24:56 【问题描述】:

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

int myArray[10] =  1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ;

Java 中相同:

int[] myArray =  1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ;

以及其他编程语言中的等价物。

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


注意:我已经针对 Java 编程语言询问过 this question,我知道这是真的。但我想知道这种行为是否是任何(或大多数)编程语言的规则,我不确定编辑是否是最好的询问方式。

【问题讨论】:

用一种无法保证的语言进行编程会非常困难。 我认为如果行为是其他任何东西,它就不会被称为数组。 如果您使用正确的容器,可以。有了一些字典,情况就完全不同了。 @Jarod42 容器是什么意思? 也许 Befunge 语言可以说是一种数组不保持顺序的语言。 en.wikipedia.org/wiki/Befunge 【参考方案1】:

让我们听听 C 语言的创建者对此有何评论:

一个数组可以通过在其声明后面加上一个列表来初始化 用大括号括起来并用逗号分隔的初始化程序。为了 例如,用每个天数初始化一个数组 days 月份: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 BRIAN W KERNIGHAN & DENNIS M RITCHIE,第二版,第 95 页。

【讨论】:

如果您引用,请说明您引用的具体内容。 谢谢,我正准备去但忘了。【参考方案2】:

这两种情况都是一样的

int[] myArray = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ;

它会做的

int[0] = 1
int[1] = 2
.
.
.
int[9] = 10

它不会因语言而异 int[] arrayjava 的理想选择,只是为了程序方便 int array[] 是允许的。

【讨论】:

以上是关于初始化数组是不是保留其在 C/C++ 和类似语言中的顺序? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

用c语言编!向一维数组中第 i 个元素前插入一新的元素。

c语言 数组可以转换成字符串吗

零基础学C语言内存知识总结:memset函数和calloc函数

C/C++ 中是不是存在锯齿状数组?

c/c++数组名和指针区别深入探索

C语言中,memset函数都可以给啥类型的数组清零?