首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在BCPL中初始化数组?

如何在BCPL中初始化数组?
EN

Stack Overflow用户
提问于 2015-04-06 21:34:37
回答 2查看 223关注 0票数 3

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-17 08:41:14

您将我的记忆扩展了一些(大约30年),但我似乎还记得,let只用于创建新的局部变量(也包括函数和其他东西,但这与您的问题并不真正相关)。

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

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

换句话说,语句let stringArr = newvec(12)既创建了初始指针单元格,又创建了第二层指针,这些指针还不能指向有用的任何位置:

代码语言:javascript
复制
+-----------+
| stringArr | ---+
+-----------+    |    +-------------+
                 +--> | stringArr!0 | --> ?
                      +-------------+
                      | stringArr!1 | --> ?
                      +-------------+
                      :      :      :
                      +-------------+
                      | stringArr!N | --> ?
                      +-------------+

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

它类似于C语言,因为你不会写:

代码语言:javascript
复制
int xyzzy[10];        // Make array of ten elements.
int xyzzy[0] = 42;    // Set first element to something.

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

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

代码语言:javascript
复制
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.
票数 3
EN

Stack Overflow用户

发布于 2017-01-25 01:34:49

解决方案是合理的,但我的两个版本的BCPL (Martin‘s和Robert的obcpl)都抱怨newvec(),并且要求:=而不是第二行中的=。我让它和:

代码语言:javascript
复制
let stringArr = getvec(12)
stringArr!i := getvec(12)

约翰·布特兰

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29480073

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档