-2

test以下の場合の関数の結果について混乱してい-1ます。

#include <stdio.h>
int test(const void*, const void*);
int main()
{
    int a = 10, b = 5;
    int result = test(&a, &b);
    printf("Result: %d", result);
    return 0;
}

int test(const void* a, const void* b) {
    const double* da = (const double*)a;
    const double* db = (const double*)b;
    return (*da > * db) - (*da < *db);
}

0x0135fb00今は私のdaの値とaのアドレスです
0x0135faf4今は私のdbの値とbのアドレスです

私の知る限り、関係演算子は True の場合は 1、False の場合は 0 を返すため、この場合は次のようにする必要があります。

*da > *db --> 1
(a のアドレス) の値は(b のアドレス) のda値よりも大きいためです。 (aのアドレス)の値は(bのアドレス)の値より小さくないからです。 したがって、1-0 は 1 です。 具体的に言うと、da の値と db の値をデバッガーで比較することで、この結論に達しました (デフォルトの C コンパイラで Visual Studio を使用しています)。私は何が欠けていますか? PS: GNU の公式 Web サイトでこのコードを見つけました。db
*da < *db --> 0
dadb


4

1 に答える 1