用数字填充数组时出现问题



我创建了一个数组,想用数字填充它。我使用了一个循环,但它在转到下一个项目时破坏了上一项:

create mass 2 2 * CELLS ALLOT
: [!] ( value index array -- ) +  ! ;
: show
4 0 DO mass I + ? LOOP ;
: fill
4 0 DO I I mass [!] show CR LOOP ;
fill
3 3 mass !
show

。所以show-word一步一步地给我这个:

0 0 0 0
256 1 0 0
131328 513 2 0
50462976 197121 770 3

此外,3 3 mass !show-word给了我这个:

3 0 0 0  ok

我不明白如何使用数组以及我的循环中发生了什么,以及为什么3 3 mass !之后它给我的不是我在循环中得到的东西...... 请帮忙。

(我知道第四部分现在都在我的问题中......对不起(

[!]show中的+单词将简单地将索引作为数字添加到地址中,从而生成与单元格大小不一致的新地址。这就是为什么你损坏了mass的内容,而且你也没有正确看到它的内容show

在不改变单词的堆栈效果的情况下,修复程序可能如下所示:

create mass 2 2 * CELLS ALLOT
: [!] ( value index array -- ) swap cells +  ! ;
: show
4 0 DO mass I cells + ? LOOP ;
: fill
4 0 DO I I mass [!] show CR LOOP ;
fill
3 3 mass [!]
show

请注意cells单词,它将索引转换为数组中正确大小的偏移量。

编辑:在上一个手动作业中使用您的[!]字,或将索引 3 转换为正确的偏移量,如@dave_thompson_085在注释中提到的那样。

最新更新