调用具有数组数组的C ++函数

时间:2018-09-09 17:31:51

标签: c++ arrays

我有一个需要调用的库函数,由于某种原因我在使用c ++基础方面遇到了麻烦。

该函数的声明为:

void doSomething(int** values, int length, int width);

它需要一个整数数组的数组。很好,我无法将数据发送到其中。

我的数据只有2个整数,例如4和5。

在c#中,我认为语法类似于:[ [4,5] ]

一个包含包含两个值的数组的数组。 到底如何用C ++声明这种基本结构?

我尝试过:

int vals[1][2] = { {4,5} }; doSomething(vals, 1,2);

但是编译器返回:

error: no matching function for call to ‘myclass::doSomething(int [1][2], int, int)’ doSomething(vals, 1, 2); ^ src/mysclass.cpp:74:6: note: candidate: void myclass::doSomething(int**, int, int)

这必须很简单。必须有一种简单的方法来声明此数据,以使用这些值调用函数。如果可能的话,我更倾向于基于堆栈。

2 个答案:

答案 0 :(得分:1)

参数int **values表示一个指向一个int(或几个连续int)的指针(或几个连续的指针)。 “几个连续...”的情况可以用来表示“二维数组”。请注意,values指向一个指针值数组,而不是一个整数数组。这与int myArr[10][20]这样的数据结构不同,在myArr中,int指向/是一个整数数组。

一种简单的调用方法是生成一维数组,让void test (int** value, int length, int width) { for (int l=0; l<length; l++) { for (int w=0; w<width; w++) { cout << "[" << l << "," << w << "]:" << value[l][w] << endl; } } } int main() { int myArr[] = { 4,5 }; int* ptrToMyArr = myArr; test (&ptrToMyArr,1,sizeof(myArr)/sizeof(int)); } 指针指向该数组,然后传递该指针的地址:

open

答案 1 :(得分:1)

您还可以执行以下操作:

#include <iostream>

void doSomething(int** value, int length, int width)
{
    for (int i = 0; i < length; ++i)
        for (int j= 0; j < width; ++j)
            std::cout << value[i][j] << std::endl;
}

int main()
{
    // array of arrays of int
    int arr[2][2] = { { 1,2 },{ 3,4 } };

    // convert to array of pointers to int
    int *vals[2] = { arr[0], arr[1] };

    doSomething(vals, 2, 2);

    return 0;
}

https://ideone.com/PgpzK0