1

私の実際の質問は、これらの値が同じ型であることが実際にわかっている場合、2 つの void ポインターに含まれる値を比較することは本当に可能ですか? たとえば、int.

void compVoids(void *firstVal, void *secondVal){
     if (firstVal < secondVal){
          cout << "This will not make any sense as this will compare addresses, not values" << endl;
     }
} 

実際には、2 つの void ポインター値を比較する必要がありますが、関数の外では型が int であることがわかっています。関数内で int の比較を使用したくありません。したがって、これは私にとってもうまくいきません:if (*(int*)firstVal > *(int*)secondVal) 何か提案はありますか? 助けてくれてどうもありがとう!

4

4 に答える 4

0

確かに可能ですが、それらは void ポインターであるため、比較するデータの量と方法を指定する必要があります。

memcmp関数が探しているものかもしれません。2 つの void ポインターと、比較するバイト数の引数を取り、比較結果を返します。ただし、すべてのデータが等しいことを条件としない比較もあります。たとえば、長さを無視して 2 つのベクトルの方向を比較します。

データを比較する方法を指定しない限り、この質問には明確な答えがありません。

于 2013-11-07T02:50:04.493 に答える
0

それらを逆参照してキャストする必要があります。

if (*(int*) firstVal < *(int*) secondVal)

int関数内で比較を使用したくないのはなぜですか? 2 つの値が同じになることがわかっていて、それらが指している値intを比較したい場合はどうすればよいでしょうか?int


挿入に関するデータを比較するための比較関数について言及しました。比較機能については、これをお勧めします:

int
compareIntValues (void *first, void *second)
{
    return (*(int*) first - *(int*) second);
}

最初の値が小さい場合は負、等しい場合は 0、最初の値が大きい場合は正の規則に従います。intデータを比較したい場合は、この関数を呼び出すだけです。

于 2013-11-07T02:14:15.183 に答える