こんにちは私はそれが機能している理由を理解するのに苦労しているコードに出くわしました、そして誰かが私を説明してくれれば幸いですここにコードがありますこれは実際にはここにある実際のコードの非常に単純化されたバージョンですhttp ://acts.nersc.gov/hypre/example10/ex10.cxx.html
#include <iostream>
int main(int argc, char *argv[]){
double ***elemStiff = new double**[10];
int i, k;
for (i = 0; i < 10; i++){
elemStiff[i] = new double*[4];
for (k = 0; k < 4; k++){
elemStiff[i][k] = new double[4];
}
double **A = elemStiff[i];
for (k = 0; k < 4; k++)
A[k][k] = 2/3.;
A[0][1] = A[1][0] = -1/6.;
A[0][2] = A[2][0] = -1/3.;
A[0][3] = A[3][0] = -1/6.;
A[1][2] = A[2][1] = -1/6.;
A[1][3] = A[3][1] = -1/3.;
A[2][3] = A[3][2] = -1/6.;
}
std::cout << elemStiff[1][0][0] << std::endl;
}
つまり、ここでは、10行あり、各行が4x4行列であるelemStiff配列の値を初期化して入力します。
私にとって非常に奇妙なのは、コードがdouble ** A =elemStiff[i]の助けを借りてelemStiff配列のエントリを埋めることです。
私が最初に見たとき、それはエラーを与えるでしょうが、それは動作します!。Aに渡された値は、elemStiff配列で同時に渡されますが、なぜそれが機能するのかわかりません
ありがとうございました