gpt4 book ai didi

c++ - 理解指针的使用

转载 作者:行者123 更新时间:2023-11-30 02:57:14 25 4
gpt4 key购买 nike

您好,我遇到了一段代码,我很难理解它为什么有效,如果有人能向我解释,我将不胜感激这是代码这实际上是真实代码的一个非常简化的版本,可以在这里找到 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 数组上,但我不明白为什么会这样

谢谢

最佳答案

让我们从更简单的版本开始:

int* array = new int[10];
int* ptr = array; // equivalent to ptr = &array[0]

for (int i = 0; i < 10; ++i)
ptr[i] = i; // writing into the memory that ptr points to

for (int i = 0; i < 10; ++i)
std::cout << array[i]; // outputs: 0123456789

在这个例子中,我们创建了一个指针ptr,它指向array 的第一个元素。那么当我们写入ptr指向的内存时,我们实际上是在写入那个array。因此,当我们检查 array 元素的值时,我们可以看到它们已正确初始化。

您的代码几乎相同,只是一个包含 10 个二维数组的数组:

double ***elemStiff = new double**[10];

然后就像我们在我的简单示例中使用 ptr 一样,您使用临时指针 A 使其指向这 10 个二维数组中的每一个:

for (i = 0; i < 10; i++)
double **A = elemStiff[i];

关于c++ - 理解指针的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14820033/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com