gpt4 book ai didi

arrays - 如何在 BCPL 中初始化数组数组?

转载 作者:行者123 更新时间:2023-12-01 23:45:30 26 4
gpt4 key购买 nike

我试过 let stringArr = newvec(12); 然后尝试初始化数组中的每个点:let stringArr!i = newvec(5);但这会返回一个错误,告诉我我不能那样做。这里有人可以帮助我学习这种恐龙语言吗?

最佳答案

你有点牵强我的内存(大约三十年的程度),但我似乎记得 let 仅用于创建局部变量(也有功能,可能还有其他功能,但这与您的问题并不相关。

因此语句 let stringArr = newvec(12) 在创建新变量 stringArr 或更准确地说,一个 12 单元匿名向量和 stringArr 变量保存该向量的地址

然而,let stringArr!i = newvec(5)有效的,因为 stringArr!i 实际上不是一个新变量.它只是已存在的 stringArr 向量中单元格编号 i 的内存内容。

换句话说,语句 let stringArr = newvec(12) 创建了初始指针单元第二层指针,它们不会指向任何有用的地方然而:

+-----------+
| stringArr | ---+
+-----------+ | +-------------+
+--> | stringArr!0 | --> ?
+-------------+
| stringArr!1 | --> ?
+-------------+
: : :
+-------------+
| stringArr!N | --> ?
+-------------+

而且,由于指针已经存在,您不应该使用 let 来设置它们。

它在 C 中的相似之处在于您不会编写:

int xyzzy[10];        // Make array of ten elements.
int xyzzy[0] = 42; // Set first element to something.

因为第二行不应该定义一个变量,它的目的只是简单地将一个现有元素设置为给定值,完成xyzzy[0] = 42


因此,正确的方法是在 BCPL 中避免对第二类语句使用 let 关键字:

let stringArr = newvec(12)   // Create new vector AND new variable,
// put vector address into cell for
// that variable.
stringArr!i := newvec(5) // Create new vector, put vector
// address into EXISTING cell.

关于arrays - 如何在 BCPL 中初始化数组数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29480073/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com