嗨,我遇到了一个代码,我很难理解它为什么工作,如果有人能解释我,我将不胜感激 这是代码 这实际上是真实代码的一个非常简化的版本,可以在这里找到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;
}
简而言之,这里我们初始化并填充 elemStiff 数组的值,该数组有 10 行,每行是一个 4x4 矩阵。
对我来说非常奇怪的是代码在 double **A = elemStiff[i]; 的帮助下填写了 elemStiff 数组的条目。
当我第一次看到我虽然它会给出一个错误但它有效!在 A 上传递的值,它们同时在 elemStiff 数组上传递,但我不明白它为什么起作用
谢谢