/*
这几天开始使用D语言做开发, 刚开始写代码就遇到问题。定义的2维数组总是不能正确初始化和赋值。
为此,我单独写了段小程序来尝试如何使用D语言的2维数组。
代码如下(要复制并编译执行此代码,请使用utf-8格式保存文件):
*/
import std.stdio;
void print_array(int[2][] v)
{
foreach(inout t;v)
{
writefln(":",t.length," 1:", t[0..2]);
}
writefln("----------------");
}
int main(char[][] args)
{
// D语言数组初始化赋值
int[2][5] chess = [1,2,3,4,5,6,7,8,9,10];
// int[2][5] chess = [[1,2],[3,4],[5,6],[7,8],[9, 10]]; //错误,
print_array(chess);
// D语言数组整体赋值的方法
chess[] = [3,2]; // 把所有的元素赋值为 [3,2]
// chess[] = [3]; // 错误
print_array(chess);
// D语言数组支持的切片特性
chess[1..2] = [4,4];
print_array(chess);
// chess[1..3] = [5,5,6,6]; // 错误
chess[1..3] = [5,5];
print_array(chess);
// 注意: D语言数组与 C语言数组的差别:
// D语言多维数组在定义时 int[2][5] ,中的后一个为最外层数组的大小,这一点是D语言数组在使用时需要特别注意的地方
// 在 D语言规范中,有明确的说明: Arrays
/*
int[] a; // dynamic array of ints
int[4][3] b; // array of 3 arrays of 4 ints each
int[][5] c; // array of 5 dynamic arrays of ints.
int*[]*[3] d; // array of 3 pointers to dynamic arrays of pointers to ints
int[]* e; // pointer to dynamic array of ints
*/
// D语言数组在使用时, chess[a][b] 中的 a 为最外层数组下标, 使用习惯遵循 C/C++ 的数组使用习惯
chess[2][1] = 100;
print_array(chess);
return 0;
}
// 输出结果为 :
/*
:2 1:[1,2]
:2 1:[3,4]
:2 1:[5,6]
:2 1:[7,8]
:2 1:[9,10]
----------------
:2 1:[3,2]
:2 1:[3,2]
:2 1:[3,2]
:2 1:[3,2]
:2 1:[3,2]
----------------
:2 1:[3,2]
:2 1:[4,4]
:2 1:[3,2]
:2 1:[3,2]
:2 1:[3,2]
----------------
:2 1:[3,2]
:2 1:[5,5]
:2 1:[5,5]
:2 1:[3,2]
:2 1:[3,2]
----------------
:2 1:[3,2]
:2 1:[5,5]
:2 1:[5,100]
:2 1:[3,2]
:2 1:[3,2]
----------------
*/