【问题标题】: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

标签: java c++ c arrays programming-languages


【解决方案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[] array 是 java 的理想选择,只是为了程序方便 int array[] 是允许的。

【讨论】:

    猜你喜欢
    • 2016-04-16
    • 1970-01-01
    • 2016-02-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-23
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多