2

我想将新定义的数组传递bool myArr[] = { false, false, true };给现有函数下面。

void fun(bool** pArr, int idx)
{
    if(NULL == *pArr)
       return;

    (*pArr)[idx] = false;

    ...
    ...

    return;
}

我不允许更改子程序中的任何内容fun,我想通过使用标识符来调用该函数myArr。当我尝试时,fun(&myArr, 2);我得到以下编译错误。

没有匹配的调用函数fun(bool (*)[3], int)

候选人是: void fun(bool**, int)

我能想到的一种方法如下

bool* ptr = myArr;
fun(&ptr, 2);

但它对我来说看起来很脏,请建议一种方法来调用fun我的使用myArr

4

4 回答 4

4

需要指向指针的函数通常需要一个交错数组您可以使用单个元素构造一个数组数组myArray,并将该数组传递给您的函数,如下所示:

bool *arrayOfPtrs[] = { myArray };
fun(arrayOfPtrs, 2);

这比您的指针解决方案读起来略好,因为创建指针数组消除了为什么要创建指向指针的指针的问题(demo)。

于 2016-05-25T15:19:21.787 回答
1

此函数需要一个指向 a 的指针bool*,因此调用它的唯一方法是在bool*某处拥有一个实际对象。你的解决方案是唯一的。

于 2016-05-25T15:13:30.000 回答
0

如果你想避免每次调用函数时都使用 hack,你可以简单地编写一个包装函数:

void fun(bool** pArr, int idx)
{
    if(NULL == *pArr)
       return;

    (*pArr)[idx] = false;
}

void super_fun(bool* pArr, int idx)
{
    fun(&pArr, idx);
}

int main()
{
    bool myArr[] = { false, false, true };

    super_fun(myArr, 2);
}
于 2016-05-25T15:38:33.523 回答
0

我会做一些不同的事情。我认为这有点清洁:

void fun2(bool * pArr, int idx)
{
    *(pArr + idx) = true;

    return;
}


int main(int argc, _TCHAR* argv[])
{
    bool myArr[] = { false, false, true };

    fun2(myArr, 1);

    return 0;
}

现在我在我的 c++14 中使用它,它不允许我使用索引器直接访问元素。也许这在某个时候改变了?但我认为这是合理的。

编辑,这真的更好:

void fun3(bool pArr[], int idx)
{
    if (NULL == *pArr)
        return;

    pArr[idx] = false;

    return;
}
于 2016-05-25T15:27:22.220 回答