首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用数组数组调用C++函数

使用数组数组调用C++函数
EN

Stack Overflow用户
提问于 2018-09-10 01:31:51
回答 2查看 255关注 0票数 0

我有一个库函数需要调用,但由于某些原因,我在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)

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

EN

回答 2

Stack Overflow用户

发布于 2018-09-10 02:11:11

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

调用它的一个简单方法是生成一个一维数组,让一个int-pointer指向这个数组,并传递这个指针的地址:

代码语言:javascript
复制
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));
}
票数 1
EN

Stack Overflow用户

发布于 2018-09-10 02:29:10

你也可以这样做:

代码语言:javascript
复制
#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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52247022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档