Doubt - Static multidimension arrays
tsbockman via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Tue Jan 19 00:27:56 PST 2016
On Tuesday, 19 January 2016 at 07:46:59 UTC, Mike Parker wrote:
> It's not that he's seeing them as special, it's just that
> indexing them in D is different than doing so in C or C++. It
> trips a lot of people up.
No, the difference is actually in C/C++ 's declaration syntax;
the way that indexing works is exactly the same as in D.
This C++ code (http://codepad.org/XeVSndBP):
#include <iostream>
#include <cstring>
class Row {
int data[10];
public:
int& operator[](int x) {
return data[x]; }
};
int main(void) {
int arr2d[5][10];
Row arrOfArrs[5];
for(int r = 0; r < 5; ++r)
{
for(int c = 0; c < 10; ++c)
{
arr2d[r][c] = (r * 10) + c;
arrOfArrs[r][c] = (r * 10) + c;
}
}
cout << (arr2d[4][9] == arrOfArrs[4][9]) << endl;
cout << (memcmp(arr2d, arrOfArrs, sizeof(int)*5*10) == 0) <<
endl;
return 0;
}
Does exactly the same thing as this D code
(http://dpaste.dzfl.pl/1731eb86bc83):
import std.stdio;
import core.stdc.string;
alias Row = int[10];
int main() {
int[10][5] arr2d;
Row[5] arrOfArrs;
for(int r = 0; r < 5; ++r)
{
for(int c = 0; c < 10; ++c)
{
arr2d[r][c] = (r * 10) + c;
arrOfArrs[r][c] = (r * 10) + c;
}
}
writeln(arr2d[4][9] == arrOfArrs[4][9]);
writeln(memcmp(arr2d.ptr, arrOfArrs.ptr, int.sizeof*5*10) ==
0);
return 0;
}
The only relevant difference between the two, is that the order
of the row and column specification is swapped in *the
declaration*, not when indexing.
More information about the Digitalmars-d-learn
mailing list