という自動変数を作成していて、ポインタであるageという変数も作成しています。これは何かへのポインターであることを意味しますが、あなたには何がわかりません。次に、の値をポインタに代入しています。型システムを満たすためには、構文を使用してキャストする必要があり、コンパイラーに「自分が何をしているのか知っている」と伝えます。pvoid *agepvoid *(void *)
整数をポインターに格納する理由については void *...私が考える正当な理由はありません。おそらく、スタック上の変数を指すことp = &ageを意味します。p
ratzip のコメントに答えるには:
`(void *)age`
void *「」の値を持つポインタを意味しますage。
私が書いた場合void *p = malloc(1)、それはいくつかのメモリを割り当て、の数値pはメモリ内のアドレスになります12345。メモリ内のその値に移動すると、割り当てたメモリが見つかります。私が書いた場合(void *)age、私はキャストしています(つまり、ある型で値を取得し、別の型に格納しています)、それをに割り当てていpます。の値pは 20 で、p「アドレス 20 のメモリ」を指します。使用したいメモリがそこにあることがわかっていない限り、これは無意味です。99.999%の確信を持って、そうではないと言えます。intとpointerはどちらも数値ですが、まったく異なる目的で使用されます。1 つはユーザーに対する数値を表し、1 つはコンピューターに対するメモリ アドレスを表します。
(もちろん、仮想化されたメモリでは、上記は厳密には当てはまりません)