返回介绍

4.7 数组赋值

发布于 2020-09-09 22:55:44 字数 1322 浏览 1155 评论 0 收藏 0

对固定尺寸的非压缩数组赋值要求源数组和目的数组都具有相同非压缩维数,并且每一维的长度都必须相同。赋值通过将源数组的每一个元素赋值给目的数组的对应元素来实现,它要求源数组与目的数组具有兼容的类型。兼容类型是指在赋值操作上能够兼容的类型。在尺寸不等的固定尺寸非压缩数组间赋值会导致类型检查错误。

int A[10:1]; // 具有10个元素的固定尺寸数组
int B[0:9];  // 具有10个元素的固定尺寸数组
int C[24:1]; // 具有24个元素的固定尺寸数组
A = B;       // 正确。兼容类型并具有相同的尺寸
A = C;       // 类型检查错误:不同的尺寸

wire数组可以赋值为具有相同的非压缩维数并且每一维都具有相同长度的变量数组,反之亦然。

wire [31:0] W[9:0];
assign W = A;
initial #10 B = W;

如果一个动态数组与一个固定尺寸数组维数的长度相同,那么这个动态数组可以被赋值为一个具有兼容类型的一维固定尺寸数组。与固定尺寸数组的赋值不同,这个操作在运行时进行类型检查,这可能会导致一个错误。

int A[100:1];       // 具有100个元素的固定尺寸数组
int B[] = new[100]; // 具有100个元素的动态数组
int C[] = new[8];   // 具有8个元素的动态数组
A = B;              // 兼容类型并具有相同的尺寸
A = C;              // 类型检查错误:不同的尺寸

一个动态数组或一维固定尺寸数组可以被赋值到一个具有兼容类型的动态数组。在这种情况下,赋值会产生一个新的动态数组,这个新的动态数组的长度等于固定尺寸数组的长度。例如:

int A[100:1];     // 具有100个元素的固定尺寸数组
int B[];          // 空的动态数组
int C[] = new[8]; // 具有8个元素的动态数组
B = A;            // 正确,B具有100个元素
B = C;            // 正确,B具有8个元素

最后一条语句等价于:

B = new[C.size](C);

相似地,赋值的源可以是一个调用数组分片或串联的复杂表达式。例如:

string d[1:5] = {"a", "b", "c", "d", "e"};
string p[];
p = {d[1:3], "hello", d[4:5]};

上面的例子产生动态数组p,并具有“a”, “b”, “c”, “hello”, “d”, “e”的内容。

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

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

发布评论

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