C++:访问作为函数参数传递的双指针数组指向的变量的值

约阿希姆

我正在尝试访问作为函数参数传递的二维双指针数组中的指针指向的值

float cfun (float **indatav, int rows, int cols)
{
    float* *outdatav = new float*[rows];
    for (int i=0; i < rows; i++){
        outdatav[i] = new float[cols];
    }

    for (int i=0; i < rows; i++){
        for (int j=0; j < cols; j++){
            outdatav[i][j] = *(*(indatav[i])[j]);
            }
    }

    return outdatav;
}

我尝试了几种变体,但没有一个有效。这个变体在我看来是最正确的,但不起作用,我不明白为什么。任何提示或解释将不胜感激。

我知道有outdatav[i][j] = indatav[i][j];一个返回类型float**可以工作,但这不是我要找的,因为在这种情况下,函数将返回双指针的内存地址,而我正在寻找那些指向的变量的值指针。

一个可重现的例子是:

#include <iostream> 
#include <vector>
using namespace std;

//float cfun (float **indatav, int rows, int cols)
float** cfun (float **indatav, int rows, int cols)
{
    float** outdatav = new float*[rows];
    for (int i=0; i < rows; i++){
        outdatav[i] = new float[cols];
    }

    for (int i=0; i < rows; i++){
        for (int j=0; j < cols; j++){
            outdatav[i][j] = *(*(indatav[i])[j]);
        }
    }
    return outdatav;
}

int main(){

//  float indatav[2][2] = {{1.,2.};{3;4}} // WRONG!
    float indatav[2][2] = {{1.,2.},{3,4}};// RIGHT!
    int rows = 2, cols = 2;

//  float y[2][2] = cfun(**indatav, rows, cols); // Try compiling this!
    float **y = cfun(indatav, rows, cols); // THIS DOES WHAT YOU ARE AKSING!
    return 0;
}

哪里y会有值{{1.,2.},{3,4}}// 注意变化

阿德里安鼹鼠

当您正确地取消引用outdatav二维数组时,您似乎很舒服,那么是什么让您认为indatav二维数组应该有任何不同的对待?尝试以下两行校正:

float** cfun (float **indatav, int rows, int cols) // Now return 2D pointer!
{
    float* *outdatav = new float*[rows];
    for (int i=0; i < rows; i++){
        outdatav[i] = new float[cols];
    }

    for (int i=0; i < rows; i++){
        for (int j=0; j < cols; j++){
        //  outdatav[i][j] = *(*(indatav[i])[j]);
            outdatav[i][j] = indatav[i][j]; // Why don't you think this will work?
            }
    }

    return outdatav; // Note change in function declaration!
}

毕竟,两者outdatavindatav具有完全相同的声明——两者都是float**.

在您编辑的问题中,您现在有一个电话:y = cfun(**indatav, rows, cols);然后添加

其中 y 的值为 {{1.,2.},{3;4}}

正是我如何解释你想要的。您需要将变量“y”声明为:float** y并且第 0 行和第 1 列的数据的实际值将由表达式给出y[0][1]但是,您的调用cfun 错误并且应该是:y = cfun(indatav, rows, cols);对于您给出的示例。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将指向char数组的指针作为函数的参数传递-C

来自分类Dev

C const 指向 const struct 数组的指针作为函数参数

来自分类Dev

C语言-基于作为参数传递的索引值调用函数-函数指针数组

来自分类Dev

指向函数的C ++指针作为参数

来自分类Dev

指向函数的C ++指针作为参数

来自分类Dev

将指针传递给char数组作为函数的参数-C

来自分类Dev

C ++更改作为函数参数传递的指针值

来自分类Dev

在C函数中传递指向数组的指针

来自分类Dev

将指向2D VLA的指针作为函数参数传递给C中的行向量

来自分类Dev

使用 C++11 将指向成员函数的指针作为参数传递

来自分类Dev

如何在C中将指向结构的指针数组作为参数传递

来自分类Dev

C ++将指向成员的指针作为模板参数传递

来自分类Dev

指针数组作为c函数中的参数

来自分类Dev

将指向一个C函数的指针作为另一个函数的参数传递

来自分类Dev

将指向一个C函数的指针作为另一个函数的参数传递

来自分类Dev

在C ++中将数组作为函数参数传递

来自分类Dev

无法“指向” C中传递的函数指针数组

来自分类Dev

指向结构中数组的C指针传递给函数

来自分类Dev

将指向数组值的指针从 Cython 传递给 C

来自分类Dev

如何从C#访问以指针作为输入参数的C ++函数

来自分类Dev

指向数组C ++的指针值

来自分类Dev

C将指针作为函数中的参数传递

来自分类Dev

c结构将自身作为参数传递给指针函数

来自分类Dev

无法在C中将结构指针作为函数参数传递

来自分类Dev

C ++将方法的指针数组作为参数传递给方法

来自分类Dev

作为参数传递时,在函数中更新指针地址。[将指针作为C中的引用传递]

来自分类Dev

双指针作为C中的参数

来自分类Dev

如何从C ++中的静态函数内部将指向静态函数的指针作为另一个静态函数的参数传递

来自分类Dev

将结构数组传递给函数作为指针(C)

Related 相关文章

  1. 1

    将指向char数组的指针作为函数的参数传递-C

  2. 2

    C const 指向 const struct 数组的指针作为函数参数

  3. 3

    C语言-基于作为参数传递的索引值调用函数-函数指针数组

  4. 4

    指向函数的C ++指针作为参数

  5. 5

    指向函数的C ++指针作为参数

  6. 6

    将指针传递给char数组作为函数的参数-C

  7. 7

    C ++更改作为函数参数传递的指针值

  8. 8

    在C函数中传递指向数组的指针

  9. 9

    将指向2D VLA的指针作为函数参数传递给C中的行向量

  10. 10

    使用 C++11 将指向成员函数的指针作为参数传递

  11. 11

    如何在C中将指向结构的指针数组作为参数传递

  12. 12

    C ++将指向成员的指针作为模板参数传递

  13. 13

    指针数组作为c函数中的参数

  14. 14

    将指向一个C函数的指针作为另一个函数的参数传递

  15. 15

    将指向一个C函数的指针作为另一个函数的参数传递

  16. 16

    在C ++中将数组作为函数参数传递

  17. 17

    无法“指向” C中传递的函数指针数组

  18. 18

    指向结构中数组的C指针传递给函数

  19. 19

    将指向数组值的指针从 Cython 传递给 C

  20. 20

    如何从C#访问以指针作为输入参数的C ++函数

  21. 21

    指向数组C ++的指针值

  22. 22

    C将指针作为函数中的参数传递

  23. 23

    c结构将自身作为参数传递给指针函数

  24. 24

    无法在C中将结构指针作为函数参数传递

  25. 25

    C ++将方法的指针数组作为参数传递给方法

  26. 26

    作为参数传递时,在函数中更新指针地址。[将指针作为C中的引用传递]

  27. 27

    双指针作为C中的参数

  28. 28

    如何从C ++中的静态函数内部将指向静态函数的指针作为另一个静态函数的参数传递

  29. 29

    将结构数组传递给函数作为指针(C)

热门标签

归档