. restrict, C Fortran C. , , . .
. . , C++ (, ). runtime. ?
double a[n][n]
std::array<std::array<double, n>, n>
, . . (n) runtime.
new double[n][n]
( , new, runtime-). :
double **a = new double *[n]; // n double
for (int i = 0; i != n; ++i)
{
a[i] = new double[n];
}
. i- j- a[i][j]. . a — . , . , i- j- , , . ( . .) .
std::vector<std::vector<
double>>
.
UPD 2016-12-11 0:00. . , .:
double *a = new double[n * n];
, i- j- : a[i * n + j]. .
, (a[i][j]), ? , . .
. C99 variable length arrays (VLA), , . . gcc VLA , ( ) . ( , . UPD.)Fortran . i- j- .
, , Fortran . Fortran', 1957- . Fortran' (FORmula TRANslation), (C 1969- ). Fortran' . . . Fortran 90.
Fortran 90 . 26 . 26 Fortran'. C++ .
:
REAL, ALLOCATABLE :: A (:,:)
...
ALLOCATE (A (N,N))
i- j- : A(I, J) (, , Fortran C C++).
, - C++. Boost.MultiArray. Boost, , .restrict. restrict. Fortran' (, ). , , . . . a b, , a[2] ( C) b[3]. , a[2], b[3], a[2] , b[3] . . aliasing.
, C . , , , , . :
void f (int a[2])
:
void f (int a[])
:
void f (int *a)
. , «» a «» b, . , , , , / , , ( C89, ). , , a[2] — b[3]. , a[2], b[3], commit . , Fortran'.
C99 - restrict, , « », , . , C Fortran.
Fortran . , Fortran , : C. , , Fortran C.
. aso. , . Fortran'. , , restrict. Fortran . :) , , , . , C. Fortran', , - - , restrict C Fortran. . :)
UPD 2016-12-10 14:03. selgjos, , C99 VLA - . , :
double a[n][n]
, . . . :
double (*a)[n] = malloc (n * n * sizeof (double));
a — , . n n, . i- j- a[i][j]. - , :
void f (int n, double a[n][n])
, , C . Fortran. C++ - .
UPD 2016-12-12 19:12. :
, . . , , , , . , , , . .
UPD 2016-12-12 22:49. :
C++ Fortran C. , , , . Fortran «» , C++ — . .