| |
| Posted by Ali Çehreli in reply to Salih Dincer | PermalinkReply |
|
Ali Çehreli
Posted in reply to Salih Dincer
| On 6/11/22 04:16, Salih Dincer wrote:
> I think D is very consistent with our feelings. That is, the order in
> memory is in the form of rows x columns.
Yet, there are no rows or columns because neither D nor C (nor C++) have multip-dimensional arrays. They all have arrays where elements are layed out in memory consecutively.
The type of the elements and what they represent is entilery up to the programmer.
> But yes, in reverse(column x
> row) when you set it up statically.
If you mean we can set up the memory in any way we want, I agree but again, since there are no mult-dimensional arrays, there cannot be the reverse of the order.
> This sample code working on pointers
> can be a proof:
If it's prooving that elemets are side-by-side, then it's by spec.
Here is an example where I have array where each element is a column:
import std.stdio;
import std.range;
import std.algorithm;
void main() {
// I decide that this array represents
// Three rows of two columns.
int[][] arr;
arr.length = 2;
foreach (ref column; arr) {
column.length = 3;
}
setFirstColumn(arr, 1);
printArray(arr);
}
void setFirstColumn(int[][] arr, int value) {
// The first element is my first column.
arr[0][] = value;
}
void printArray(int[][] arr) {
// Because stdout takes line-by-line,
// we print a transposition.
arr.transposed.writefln!"%-(%-(%s %)\n%)";
}
You may think that the final transposition is a trick. No, it was needed only because stdout takes line-by-line. If I used a library like ncurses, I could have printed my array exactly the way I used it.
The point is, there are no multi-dimensional arrays. Programmers use arrays as they need and sometimes the elements are arrays.
Ali
|