[求助]关于char[][]数组

shawind 2007-06-15
char[][] split(char[] s);
Split s[] into an array of words, using whitespace as the delimiter.

char[][] s = split("The brown fox jump lazy dog");

char[][]应该说是前缀声明法吧,从右向左读。
s[1][4] 却不是lazy中的a而是brown中的n,s[4][1] 才是a。
怎么成了从左向右的?
而且为什么s[4][] s[][4] s[4]都可以输出lazy?
oldrev 2007-06-15
看看 splite 的实现不就知道了
qiezi 2007-06-16
shawind 写道
char[][] split(char[] s);
Split s[] into an array of words, using whitespace as the delimiter.

char[][] s = split("The brown fox jump lazy dog");

char[][]应该说是前缀声明法吧,从右向左读。
s[1][4] 却不是lazy中的a而是brown中的n,s[4][1] 才是a。
怎么成了从左向右的?

alias char[] String,再试着去理解吧,这个东西不要死扣。

shawind 写道

而且为什么s[4][] s[][4] s[4]都可以输出lazy?

s[4][]是取得第5个元素,再调用数组的[],s[][4]是先调用s的[],再取第5个元素,结果当然会是一样。不带参数的[]和[0..$]是一样的。邮件列表中讨论过这个问题的。
shawind 2007-06-16
谢谢。
这样就好理解了,直接记住char[]不是一般的数组就行。
qiezi 2007-06-16
数组处理方式都是一样的,理解方式也一样的。

char[][]的意思就是(char[])[],从右往左是没错。取值时先取的就是右边一层,不过先取的就是写在左边的。
shawind 2007-06-16
同样是数组,在用像float[4][4] m之类的时候,也没有发现有这个问题,
究其原因,看来还是像oldrev说的那样,是split内部处理的问题。
qiezi 2007-06-16
import std.stdio;

void main()
{
    float[][] arr = [[1.0f,2,3,4], [5,6,7,8], [9,10,11,12], [13,14,15,16]];

    writefln(arr);

    writefln("arr[2][] = ", arr[2][]);

    writefln("arr[][2] = ", arr[][2]);

    writefln("arr[2] = ", arr[2]);

    writefln("arr[1][3] = ", arr[1][3]);
}

output:
$ ./testarr
[[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]
arr[2][] = [9,10,11,12]
arr[][2] = [9,10,11,12]
arr[2] = [9,10,11,12]
arr[1][3] = 8
shawind 2007-06-16
原来是我上当了。
float[4][4] m = [1.0f,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16];
我一般用for循环来赋值什么的。
for (int i=0;i<4 ; i++)
{
    m[i][3] = i*1.0f;
}
数组就被改为
[[1,2,3,0],[5,6,7,1],[9,10,11,2],[13,14,15,3]]
被改掉其实是一列。
正好又是4*4结构,把行和列互换后,计算结果还是一样的……
Global site tag (gtag.js) - Google Analytics