了解指针的使用
Understanding the use of pointers
嗨,我遇到一个代码,我很难理解它为什么有效,如果有人能解释我,我将不胜感激这是代码这实际上是真实代码的一个非常简化的版本,可以在这里找到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矩阵。
对我来说非常奇怪的是,代码在双**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
在本例中,我们创建一个指向array
的第一个元素的指针ptr
。然后,当我们写入ptr
所指向的内存时,我们实际上是在写入array
。因此,当我们检查array
元素的值时,我们可以看到它们被正确地初始化了。
你的代码基本相同,只有一个由10个二维数组组成的数组:
double ***elemStiff = new double**[10];
然后,就像我们在我的简单示例中使用ptr
一样,使用临时指针A
使其指向这10个二维数组中的每一个:
for (i = 0; i < 10; i++)
double **A = elemStiff[i];
相关文章:
- C++我需要了解在哪里使用指针和双指针
- 尝试了解C++指针和数据类型初始化
- 检查模板中 nullptr 的函数指针,了解任何类型的可调用对象
- 我试图了解在异或操作后指针变量正在更改
- 了解通过引用传递取消引用指针时C++堆/堆栈分配
- 确认了解指向函数的指针
- 需要更好地了解使用 Windows API 的智能指针
- 了解 ARM 程序集说明和 C/C++ 指针
- 了解const自动指针
- 简单的功能大小;了解指针-指针差异
- 了解常量指针指向C++中的常量值
- 了解班级共享指针及其在继承中的使用
- C++有人更了解这种指针吗
- 基本指针如何能够在派生的类实例中了解基本成员的内存位置
- 需要帮助了解指针变量分配
- 了解 C++ 中数组和指针的差异/相似之处
- 了解std ::交换指针和std :: vectors
- 了解指针强制转换
- 使用'new'和指针了解C++代码
- 在 C 语言中使用 *&*&p 了解复杂的指针和地址运算符