Arrays dc unix:即使在同一数组索引中存储新值后仍保留初始值

Arrays dc unix:即使在同一数组索引中存储新值后仍保留初始值,arrays,unix,stack,dc,Arrays,Unix,Stack,Dc,我无法理解dc手册页中给出的示例: 对我来说,答案应该是2,因为: 10:a 这里我们将1存储在数组a的第0个位置 0Sa 现在我们将0推送到寄存器a的堆栈中 20:a 现在,我们再次将2存储在数组a的第0个位置,从而覆盖之前存储在该位置的1 洛杉矶 现在我们弹出存储在寄存器a堆栈上的0,并将其推送到主堆栈 0;A. 现在我们再次将0推送到主堆栈,然后将其弹出用作数组索引,并将存储在数组a第0个位置的2推送到主堆栈 p 现在我们打印主堆栈的顶部,即2。所以答案应该是2 我错过了什么 编辑: $

我无法理解dc手册页中给出的示例:

对我来说,答案应该是2,因为:

10:a 这里我们将1存储在数组a的第0个位置

0Sa 现在我们将0推送到寄存器a的堆栈中

20:a 现在,我们再次将2存储在数组a的第0个位置,从而覆盖之前存储在该位置的1

洛杉矶 现在我们弹出存储在寄存器a堆栈上的0,并将其推送到主堆栈

0;A. 现在我们再次将0推送到主堆栈,然后将其弹出用作数组索引,并将存储在数组a第0个位置的2推送到主堆栈

p 现在我们打印主堆栈的顶部,即2。所以答案应该是2

我错过了什么

编辑:

$ dc -V
dc (GNU bc 1.06.95) 1.3.95

手册页中示例前面给出的说明:

请注意,寄存器的每个堆叠实例都有自己的关联数组

换句话说,在同一寄存器上使用数组命令和堆栈命令时,将创建二维结构。数组命令对顶行中的条目进行操作,堆栈命令对整行进行操作

此外,使用l和l命令检索的堆栈项的标量值与数组完全分离,而不仅仅是第0个元素的别名。我没有从手册页上看到,但在我的实验中似乎是这样

下面是示例中的命令,其结果值扩展为详细格式。最外层的结构是堆栈,最上面的结构列在第一位

所有寄存器的初始值:

[
  { scalar: undefined, array: [] }
]
10:a

0南非

20:a

洛杉矶

顶部入口已弹出。其标量值0已被推送到主堆栈,其数组值[2]已被丢弃

0;a


第二;命令不修改寄存器,只将第0个数组项复制到主堆栈上。由于数组为[1],因此将在主堆栈顶部放置一个1。

手册页中示例前面给出的解释:

请注意,寄存器的每个堆叠实例都有自己的关联数组

换句话说,在同一寄存器上使用数组命令和堆栈命令时,将创建二维结构。数组命令对顶行中的条目进行操作,堆栈命令对整行进行操作

此外,使用l和l命令检索的堆栈项的标量值与数组完全分离,而不仅仅是第0个元素的别名。我没有从手册页上看到,但在我的实验中似乎是这样

下面是示例中的命令,其结果值扩展为详细格式。最外层的结构是堆栈,最上面的结构列在第一位

所有寄存器的初始值:

[
  { scalar: undefined, array: [] }
]
10:a

0南非

20:a

洛杉矶

顶部入口已弹出。其标量值0已被推送到主堆栈,其数组值[2]已被丢弃

0;a

第二;命令不修改寄存器,只将第0个数组项复制到主堆栈上。由于数组为[1],因此将在主堆栈顶部放置一个1

[
  { scalar: undefined, array: [1] }
]
[
  { scalar: 0, array: [] },
  { scalar: undefined, array: [1] }
]
[
  { scalar: 0, array: [2] },
  { scalar: undefined, array: [1] }
]
[
  { scalar: undefined, array: [1] }
]
[
  { scalar: undefined, array: [1] }
]