このコードスニペットは、私が読んでいる本から手作業でコピーしたものです。
/* scmp: string compare of *p1 and *p2 */
int scmp(const void *p1, const void *p2)
{
char *v1, *v2;
v1 = *(char **) p1;
v2 = *(char **) p2;
return strcmp(v1, v2);
}
この関数は、文字列の配列をソートするためにqsortで使用されます。私が理解していないポイントは、なぜこの機能v1 = *(char **) p1;
だけでなく、機能しないのかということです。?コンパイラはその割り当てを自動的に型キャストする必要があると思います。または、これを考慮してください:v1 = (char *) p1;
v1 = p1;
/* scmp: string compare of *p1 and *p2 */
int scmp(const void *p1, const void *p2)
{
return strcmp(p1, p2);
}
私は(私はひどく間違っているかもしれませんが)コンパイラーはそれが期待するものなので、型キャストp1
しp2
て入力することになっていると思います。char *
strcmp(char *, char *)
要約すると、問題はなぜv1 = *(char **) p1
ですか?