3

次のコードはThe Practice of Programmingからのものです。

int scmp(const void *p1, const void *p2)
{
    char *v1, *v2;
    v1 = *(char **) p1;
    v2 = *(char **) p2;
    return strcmp(v1, v2);
}

式を使用する理由がわかりません*(char **) p1。代わりに使え(char *)p1ますか?それらの違いは何ですか?

ありがとう!

4

4 に答える 4

2

(char**)p1p1は、char*(char*) を指すポインター (2 番目の * が示す) であることを意味します。
したがって、値*(char**)p1を取得すると、結果はchar (文字列と言えます)* になり、v1 に割り当てることができます (型はchar *)。
void * 任意のポインターに変換できます*(char*,int*,double*)...*

于 2012-11-21T09:33:01.523 に答える