当前位置:  开发笔记 > 编程语言 > 正文

无法将(*)[]转换为**

如何解决《无法将(*)[]转换为**》经验,为你挑选了1个好方法。

如果我创建一个文件:

TEST.CPP:

void f(double **a) {

}

int main() {
    double var[4][2];
    f(var);
}

然后运行:g ++ test.cpp -o test

我明白了

test.cpp: In function `int main()':
test.cpp:8: error: cannot convert `double (*)[2]' to `double**' for argument `1'
 to `void f(double**)'

为什么我不能这样做?

是不是double var [4] [2]和double**var一样然后分配内存?



1> Johannes Sch..:

C++字符串:[] vs.*

查看Excursion:Multi Dimensional Arrays,它描述了如何将多维数组作为参数传递给函数.基本上,您希望将代码更改为:

// same as void f(double (*a)[2]) {
void f(double a[][2]) { 

}

int main() {
    // note. this is not a pointer to a pointer, 
    // but an array of arrays (4 arrays of type double[2])
    double var[4][2];

    // trying to pass it by value will pass a pointer to its
    // first element 
    f(var);
}

除了最后一个维度之外的所有维度都必须为被调用函数所知.否则索引数组,编译器将无法计算到数组中值的正确距离(a [1]是sizeof(double[2])远离[0]的字节).

您似乎希望能够在不知道尺寸大小的情况下接受阵列.您可以使用模板:

template
void f(double a[][N]) { 
    // N == 2 for us
}

int main() {
    double var[4][2];
    f(var);
}

编译器将为函数使用的每个N值制作(实例化)该模板的副本,自动推导出正确的N.

推荐阅读
李桂平2402851397
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有