D是否区分动态数组与静态数组的返回/参数类型?

时间:2016-11-19 23:21:51

标签: arrays d

假设我定义了一个函数mutate,它替换了一个int数组的随机索引的内容a,并应用了一些函数

int[] mutate(int[] a) {
    int randomIndex = cast(int) uniform(a[randomIndex]);
    a[randomIndex] = a[randomIndex] + 1;
    return a;
}

此函数是否指定动态int数组,静态int数组或两者的输入和返回值?也就是说,此函数是否仅限于接受并返回数组的子类型?有没有办法区分动态和静态数组作为函数的参数?

执行以下任一操作会产生错误吗?

void main() {
    int[] dyn;
    dyn = [1, 2, 3];
    writeln(mutate(dyn));

    int[3] stat = [1,2,3];
    writeln(mutate(stat));
}

1 个答案:

答案 0 :(得分:1)

int[] mutate(int[] a)

接受切片并返回切片。切片不一定是动态数组,它可能是静态数组,但是您需要将其作为stat[]而不是stat传递。

切片就像C中的ptrlength组合:指向数据的指针(可以驻留在任何地方,动态数组,malloc数组,静态数组,某些内存块,无论如何)和长度计数。

当你退回那样的时候,你需要小心不要存放它。切片不知道它的存储位置,你可能很容易忘记谁拥有它并最终使用坏指针!做这样的事情时,确保范围是安全的。

阅读本文以获取更多信息:

http://dlang.org/d-array-article.html