2016-05-25 7 views
2

新しく定義された配列bool myArr[] = { false, false, true };を既存の関数の下に渡したいと思います。arg-listのダブルポインタを受け付ける関数に配列を渡す

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

    (*pArr)[idx] = false; 

    ... 
    ... 

    return; 
} 

私はサブルーチンfunで何かを変更することはできないと私は、識別子myArrを使用して機能を呼び出したいです。試してみるとfun(&myArr, 2);以下のコンパイルエラーが出ます。

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

候補者への呼び出しに該当する機能があります:void楽しい(ブール値**、INT)私は考えることができる

一つの方法は、以下の通りである

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

しかし、それは私に汚れているようです、fun私を呼び出す方法を提案してくださいmyArr

+0

それが汚れに見えます、何が基本的にそれを行う方法です。 –

+2

'if(NULL == * pArr)'は、話しが逆になります。 –

+2

hackyのやり方は 'fun((bool **)&myArr、2);' –

答えて

1

この関数は、bool*へのポインタを想定しているため、実際のbool*オブジェクトをどこかに置くことしかできません。あなたのソリューションは唯一のソリューションです。

4

ポインタへのポインタを必要とする関数は通常、jagged arrayが必要です。あなたは、単一の要素myArrayで配列の配列を構築し、このように、あなたの関数にその配列を渡すことができ:ポインタの配列を作成することは疑問を解消するため

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

これは、あなたのポインタのソリューションよりも若干良い読み込みますなぜポインターへのポインターを作成しているのか(demo

+0

用語*ジグザグ配列*へのリンクが良いでしょう。私は、単一のパラメータまたは単一の結果をバインドしなければならない場合、* libmysqlclient *で使用するものと思われます。 –

+0

ダブルポインタがポインタ引数を変更できるCのメソッドとして使用されている可能性が高いと思います(これはC++のリファレンスでうまくいきます)。しかし、あなたのソリューションはいずれかの方法で動作するはずです。 – interjay

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

は、今私は14私のC++でこれで遊んでいたし、それは私が直接、インデクサで要素にアクセスできませんでした:私はこれは少しクリーナーだと思います。多分それはある時点で変わったでしょうか?しかし、私はこれが合理的だと思った。

編集、これは本当に良いです:

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

    pArr[idx] = false; 

    return; 
} 
+0

標準に従うために_tmainをmainに変更できますか? – Vincent

+0

良い点。完了しました。 – JoshK

0

あなたがハッキングにあなたは単にラッパー関数を書くことができます関数を呼び出すたびに使用しないようにしたい場合:

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); 
} 
関連する問題