Multi dimensional array question.
dcoder
gtdegamo at yahoo.com
Sun Jul 11 01:06:32 PDT 2010
Hello.
I'm wondering why in D if you declare a fixed multi dimensional array, you
have to reverse the index order to access an element. I know it has something
to do with how tightly [] bind, but the consequence is that it seems so
different to other languages, it makes it error prone. So here's some code
that compiles and works:
import std.stdio;
int main() {
int[3][5] marr;
int i = 0;
foreach( j, ref a; marr) {
writefln( "%s: a.length = %s", j, a.length);
foreach( ref v; a) {
v = i++;
}
}
/* This doesn't work. marr[0][>=3] is out of bounds!!
writefln( "marr[0][0] = %s", marr[0][0]);
writefln( "marr[0][1] = %s", marr[0][1]);
writefln( "marr[0][2] = %s", marr[0][2]);
writefln( "marr[0][3] = %s", marr[0][3]);
writefln( "marr[0][4] = %s", marr[0][4]);
writefln( "marr[1][0] = %s", marr[1][0]);
writefln( "marr[1][1] = %s", marr[1][1]);
writefln( "marr[1][2] = %s", marr[1][2]);
writefln( "marr[1][3] = %s", marr[1][3]);
writefln( "marr[1][4] = %s", marr[1][4]);
*/
writefln( "marr[0][0] = %s", marr[0][0]);
writefln( "marr[1][0] = %s", marr[1][0]);
writefln( "marr[2][0] = %s", marr[2][0]);
writefln( "marr[3][0] = %s", marr[3][0]);
writefln( "marr[4][0] = %s", marr[4][0]);
writefln( "");
writefln( "marr[0][1] = %s", marr[0][1]);
writefln( "marr[1][1] = %s", marr[1][1]);
writefln( "marr[2][1] = %s", marr[2][1]);
writefln( "marr[3][1] = %s", marr[3][1]);
writefln( "marr[4][1] = %s", marr[4][1]);
writefln( "");
writefln( "marr[0][2] = %s", marr[0][2]);
writefln( "marr[1][2] = %s", marr[1][2]);
writefln( "marr[2][2] = %s", marr[2][2]);
writefln( "marr[3][2] = %s", marr[3][2]);
writefln( "marr[4][2] = %s", marr[4][2]);
writefln( "");
return 0;
}
Anyways, perhaps I am doing something wrong, or I have been writing too much C
code. What are your thoughts?
More information about the Digitalmars-d-learn
mailing list