返回介绍

8.5.3 foreach循环

发布于 2020-09-09 22:55:47 字数 1174 浏览 1015 评论 0 收藏 0

foreach结构指定在数组元素上的迭代。它的自变量是一个指明任意类型数组(固定尺寸的、动态的、及联合数组)的标识符,然后紧跟着一个包围在方括号内的循环变量的列表。每一个循环变量对应于数组的某一维。foreach结构类似于一个使用数组范围替代一个表达式来指定重复次数的repeat循环。

例子:

string words[2] = {"hello", "world"};
int prod[1:8][1:3];

foreach (words[j])
    $display(j, words[j]); // 打印每一个索引和值

foreach (prod[k,m])
    prod[k][m] = k * m;    // 初始化

循环变量的数目必须匹配数组变量的维数。空循环变量可以用来指示在对应的数组维数上没有迭代,并且趋向于尾部的连续空循环变量可以被忽略。循环变量是自动的、只读的,并且它们的作用范围对于循环来讲是本地的。每一个循环变量的类型被隐含地声明成与数组索引的类型一致。数组中任何具有相同标识符的循环变量都是错误的。

循环变量到数组索引的映射由维基数确定,如23.7节所描述的那样。对于foreach循环,更高基数的索引变化也更快。

//     1  2  3         3    4       1   2 -> 维数
int A [2][3][4]; bit [3:0][2:1] B [5:1][4];

foreach(A[i, j, k]) ...
foreach(B[q, r, , s]) ...

对于第一条foreach子句,i从0到1迭代,j从0到2迭代,k从0到3迭代。对第二条foreach子句,q从5到1迭代,r从0到3迭代、s从2到1迭代(第三个索引的迭代被忽略)。

多个循环变量对应于在指定索引上迭代的嵌套循环。循环的嵌套由维基数确定;外层循环对应于较低的基数索引。在上面的第一个例子中,最外层的循环在i上迭代,最内层的循环在k上迭代。

当循环变量用在表达式当中而不是作为指定数组的索引的时候,它们被自动地强制转换到与索引类型一致的类型。对于固定尺寸或动态数组,强制转换类型时int。对于以特定索引类型索引的联合数组,强制转换类型与索引类型一致。对于使用通配符索引(*)进行索引的联合数组,强制转换类型是无符号的longint类型。为了使用不同的类型,可以使用一个显式的强制类型转换。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文