Unless you're passing arrays of pointers to things about, the individual elements in a C array should be contiguous.
That seems to be the context from his example:
for(i = 0; i < nrows; i++){
array[i] = malloc(ncolumns * sizeof(double));
}
I suppose the counterpoint is that he's doing it wrong. But again, maybe physicists just don't want a tool with that much flexibility. arr(m, x, y)
Not quite as nice, but not too bad. double *a = malloc(sizeof(double)*nx*ny*nz);
int id;
for(int k = 0; k < nz; k++) {
for(int j = 0; j < ny; j++) {
for(int i = 0; < i < nx; i++) {
id = k*nx*ny + j*nx + i;
a[id] = /* some mathematical operation */
}
}
}
You can do it in other ways (arrays of pointes, etc), but I think this is probably the simplest conceptually, and the memory is contiguous.Sure, C could make multi-dimensional array handling nicer, but I have macros that basically do his A[x,y,z] for me, admittedly a bit more verbosely.
Many of his points about Fortran are true, but almost all his statements about C are false. Or nearly so, yes, copying an array of floats requires calling a function, memcpy, and not just using an equals sign, but that ain't rough and falls into his idea of "what actually happens ‘under the hood’ inside a computer". And others are easily handled by adopting things like the MKL (want to take the sin of everything in an array, see https://software.intel.com/en-us/mkl-developer-reference-c-t... )