私はパラメータとしてconstポインタを取得する関数(func1)を持っています。 このポインタの値は、2番目の関数(func2)に使用されます。 ブール値に応じて、この値をfunc2に渡す前にこの値を変更したいと思います。私はそれを変更する必要がある場合、私はそれの変更されたバージョンを格納するために新しいメモリを割り当てます。実際にconst intポインタは大きな配列なので、私はそれをコピーしたくありません。 私はそのように解決しようとした:C/C++ 1つの関数呼び出しでconst関数ポインタまたは単純ポインタを渡す方法
void func1(const int* value, bool change)
{
int* valueToUse;
if(change)
{
int changedValue = (*value)++;
valueToUse = &changedValue;
}
else
{
valueToUse = value; // <= here the Error occurs
}
func2(valueToUse);
}
void func2(const int* foo)
{
// ...
}
しかし、私はこのようにそれを行う場合、私は、単純なポインタへのconstポインタを割り当てるので、私はエラーを取得:
error: invalid conversion from 'const int* to int*'
は、任意の使いやすいがありますこれを解決する方法?
私は、それぞれのケースに対して2つの特別な機能を持つソリューション、または2つのポイントでfunc2を呼び出すバージョンを想像することができます。しかし、このコードは実際のコードの単純化されたバージョンなので、簡単な解決策があれば私は迷っています。
ベストは、CおよびC++で動作するソリューションです。
ありがとうございます!
へ引数が指す場合は、 'const'を削除します。 – InternetAussie
変更された値と残りの値だけをいくつかのセンチネルとして持つ別のコピーを使用できます。これで、両方の配列を他の関数に渡すことができます。最初にarray2を調べます。もしそれがセンチネルなら、それはメイン配列から取ることができ、センチネルでなければ、それはコピー配列から取るでしょう。 –
センチネル値が利用できない場合は、値を選択する場所を指定するために3番目のブール値配列を使用します。 true = array2の値、false = array1の値(constの値) –