返回介绍

4.8 将数组作为自变量

发布于 2020-09-09 22:55:45 字数 1216 浏览 997 评论 0 收藏 0

数组可以作为自变量传递给任务或函数。数组自变量通过值进行传递的规则与数组赋值的规则相同(参见10.4节)。当数组自变量通过值传递的时候,一个数组的拷贝被传递给调用任务或函数。这条规则适用于所有的数组类型:固定尺寸数组、动态数组、或联合数组。

注意:未定义尺寸的维数只能出现在动态数组中,或者出现在导入DPI函数的形式变量中。如果一个形式变量的一维是未定义尺寸的,那么真实变量中对应维数具有任意尺寸也是可以接受的。

例如:

task fun(int a[3:1][3:1]);

上面的例子声明了具有一个变量的任务fun,它的变量是一个两维的数组,并且每一维的尺寸都是3。对fun的调用必须传递一个两维的数组,并且每一维的尺寸都是3。例如,根据上面有关fun的描述,考虑以下事实:

int b[3:1][3:1];   // 正确:相同的类型、维数、和尺寸
int b[1:3][0:2];   // 正确:相同的类型、维数、和尺寸(不同的范围)
reg b[3:1][3:1];   // 正确:兼容类型的赋值
event b[3:1][3:1]; // 错误:不兼容的类型
int b[3:1];        // 错误:不兼容的维数
int b[3:1][4:1];   // 错误:不兼容的尺寸(3和4)

接收一个一维固定尺寸数组的子程序也可以传递一个具有兼容类型、相同尺寸的动态数组。

例如:

task bar(string arr[4:1]);

上面声明了一个接收一个变量的任务,变量是一个具有4个字符串的数组。这个任务可以接受下面的真实变量:

string b[4:1];       // 正确:相同的类型和尺寸
string b[5:2];       // 正确:相同的类型和尺寸(不同的范围)
string b[] = new[4]; // 正确:相同的类型和尺寸,要求运行时的检查

一个接收动态数组的例程可以被传递一个兼容类型的动态数组或者一个具有兼容类型的一维固定尺寸数组。

例如:

task foo(string arr[]);

上面声明了一个将一个字符串动态数组作为变量的任务。这个任务可以接受任何一维字符串数组或任何字符串动态数组。

一个可接受一维数组的导入DPI函数可以被传递一个兼容类型的动态数组,如果形式变量是无尺寸的,这个动态数组可以具有任何尺寸;如果形式变量是有尺寸的,那么这个动态数组需要具有相同的尺寸。然而,如果形式变量是一个无尺寸的输出,那么动态数组不能作为自变量传递。

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

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

发布评论

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