[求助]关于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结构,把行和列互换后,计算结果还是一样的…… |