[英]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
該函數需要一個指向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.