簡體   English   中英

將數組傳遞給在arg-list中接受雙指針的函數

[英]Passing an array to a function which accepts double pointer in arg-list

我想傳遞新定義的數組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);

但這對我來說似乎很臟,請提出一種使用myArr調用fun我的myArr

想要指向指針的函數通常需要一個鋸齒狀的數組 您可以使用單個元素myArray構造一個數組數組,並將該數組傳遞給函數,如下所示:

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

這比您的指針解決方案讀起來要好一些,因為創建指針數組消除了為什么要創建指向指針( demo )的問題。

該函數需要一個指向bool*的指針,因此調用它的唯一方法是在某個地方bool*一個實際的bool*對象。 您的解決方案是唯一的解決方案。

我會做一些不同的事情。 我認為這比較干凈:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM