假设我定义了一个函数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));
}
答案 0 :(得分:1)
int[] mutate(int[] a)
接受切片并返回切片。切片不一定是动态数组,它可能是静态数组,但是您需要将其作为stat[]
而不是stat
传递。
切片就像C中的ptr
和length
组合:指向数据的指针(可以驻留在任何地方,动态数组,malloc数组,静态数组,某些内存块,无论如何)和长度计数。
当你退回那样的时候,你需要小心不要存放它。切片不知道它的存储位置,你可能很容易忘记谁拥有它并最终使用坏指针!做这样的事情时,确保范围是安全的。
阅读本文以获取更多信息: