C++ 将数组传递给在arg list中接受双指针的函数

C++ 将数组传递给在arg list中接受双指针的函数,c++,arrays,pointer-to-pointer,C++,Arrays,Pointer To Pointer,我想传递新定义的数组boolmyarr[]={false,false,true}到现有功能的下方 void fun(bool** pArr, int idx) { if(NULL == *pArr) return; (*pArr)[idx] = false; ... ... return; } 我不允许更改子程序fun中的任何内容,我希望使用标识符myArr调用该函数。当我尝试乐趣时(&myArr,2)我得到下面的编译错误 调用fun

我想传递新定义的数组
boolmyarr[]={false,false,true}到现有功能的下方

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

    (*pArr)[idx] = false;

    ...
    ...

    return;
}
我不允许更改子程序
fun
中的任何内容,我希望使用标识符
myArr
调用该函数。当我尝试
乐趣时(&myArr,2)我得到下面的编译错误

调用
fun(bool(*)[3],int)

候选人包括:void-fun(bool**,int)

我能想到的一种方法如下

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

但是它看起来很脏,请建议一种使用
myArr
调用
fun
my的方法。这个函数需要一个指向
bool*
的指针,所以调用它的唯一方法是在某处有一个实际的
bool*
对象。您的解决方案是唯一的解决方案。

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

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

这比您的指针解决方案要好一些,因为创建指针数组可以消除为什么要创建指向指针()的指针的问题。

我会做一些不同的事情。我觉得这有点干净:

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;
}

如果要避免每次调用函数时都使用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);
}

它看起来很脏,基本上是怎么做的。
if(NULL==*pArr)
说起来不舒服是相反的如果函数决定分配
*pArr
,会发生什么情况??这个设计有点可疑。你的“肮脏”方式是唯一正确的…@FrankPuffer一旦你习惯了它,如果你周围的人都在使用它,它就会变得非常自然。链接到“锯齿阵列”这个术语会很好。我怀疑如果我必须绑定单个参数或单个结果,我会在libmysqlclient中使用它。我认为这里更可能使用双指针作为能够更改指针参数的C方法(最好使用C++中的引用)。但是你的解决方案应该是可行的。你能把tmain改成main来遵循标准吗?