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
da
db