c++ - 如何访问作为双指针传递的数组的元素?

标签 c++

这是函数 sum 的原型(prototype),我用它来对两个任意数组的元素求和。

double **sum(double **A, double **B, int M, int N);

它们都作为双指针传递(不要问为什么)并且 MN 应该分别是数组的维度。

我遇到的麻烦是,在函数的实现中,访问数组的元素。我试过“引用”数组(或者我认为如此)但无济于事。以下是我尝试过的事情:

> *A;  // Gives me an address, 0xf5c28f5c, not a number
> **A; // Error
> &A;  // Gives me the address of A

如果有用的话,这就是我将数组传递给 sum 的方式:

double a[] = {5.34, 5.23, 6.5, 3.51};
double b[] = {74.3, 42.1, 642.2, 54.2};

sum( (double **) a, (double **) b, 4, 4);

那么问题来了,当通过指针/双指针传递时,我究竟应该如何获取数组中的元素?

最佳答案

您的函数数组 channel 完全不正确。双指针最好被认为是指针到指针。以同样的方式,指针是一个变量,它保存着某个地方的内存地址,一个指向指针的指针也保存着一个类似的地址,恰好它引用的内存是另一个指针占用的内存。这最好用例子来描述:

include <stdio.h>

int main(int argc, char* argv[])
{
    int a = 5;
    int *p = &a;
    int **pp = &p;
    printf("pp=%p, &p=%p, p=%p, &a=%p *p=%d\n", pp, &p, p, &a, *p);
    return 0;
}

在我的 64 位 MBA 上,这给了我们:

pp=0x7fff50828bc8, &p=0x7fff50828bc8, p=0x7fff50828bd4, &a=0x7fff50828bd4 *p=5

掌握这一点,我想您会在代码中发现问题,第一个问题是对“a”和“b”的双指针的硬转换。也许试试他们的地址。其次,您可能想重新审视如何在函数中使用这些指针进行取消引用,因为很可能这也需要改进。

关于c++ - 如何访问作为双指针传递的数组的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12452558/

相关文章:

C++混淆for循环中重新声明变量的范围

c++ - Mongocxx : How to display the documents inversely

javascript - 我可以保存一个文件,该文件将仅使用 javascript/C/C++ 在服务器端从 php 代码生成,并且没有打开浏览器吗?

c++ - 如何中止 winsock 阻塞调用?

c++ - 比较两种类型是否为 "literally"相同

c++ - 为什么这在 C++ 构造函数中不起作用

c++ - 处理孙子控件的 WM_NOTIFY

c++ - 需要有关 BOOST_FOREACH/编译器错误的帮助

c++ - 如何在索引为空时停止遍历数组?

c++ - 具有非托管代码的 CLR SP