这是函数 sum
的原型(prototype),我用它来对两个任意数组的元素求和。
double **sum(double **A, double **B, int M, int N);
它们都作为双指针传递(不要问为什么)并且 M
和 N
应该分别是数组的维度。
我遇到的麻烦是,在函数的实现中,访问数组的元素。我试过“引用”数组(或者我认为如此)但无济于事。以下是我尝试过的事情:
> *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/