私はこのような関数で私のソート関数に応じて値を取得しようとしています。パラメータとして渡しvoidポインタ
void * getBest(void *t, unsigned int n, unsigned int bytes, int (*vrt)(void *, void *)) {
int i = 0;
int returnI = 0;
for(i = 0; i < n; i++) {
if(i != returnI) {
if(vrt(t[i], t[returnI]) == 1)
{
returnI = i;
}
}
}
return t[returnI];
}
次のようにソート機能を使用する:
int pieni_dbl(void *a, void *b)
{
double *ad = a;
double *bd = b;
return *ad < *bd;
}
そしてこの
double *parasDbl = getBest(dt, 6, sizeof(double), pieni_dbl);
short int *parasShort = getBest(st, 10, sizeof(short int), iso_itseis_short);
のようにそれを呼び出すが、それはエラーを与える:算術演算で使用される型 'ボイド*' のポインタ[-Wpedantic ] if(vrt(t [i]、t [paras] == 1)
なぜですか?何らかの理由でvoidポインターをANSI cで比較する関数のパラメーターとして渡すことは可能ですか?
**正確に**エラーが表示されます。次に、コンパイラが 'void *'が参照する型を逆参照するときにコンパイラがどの型を知っているかを考えてください。 – Olaf
新しいコードでC89やC90を使用しないでください!それは17年以上後に廃止されました。 – Olaf
ええ、私はANSI cが今日では廃止されていることを知っていますが、今はそれを使用しなければならず、エラーが発生しています(vrt(t [i]、t [returnI])== 1)。 – Laltzi