という自動変数を作成していて、ポインタであるage
という変数も作成しています。これは何かへのポインターであることを意味しますが、あなたには何がわかりません。次に、の値をポインタに代入しています。型システムを満たすためには、構文を使用してキャストする必要があり、コンパイラーに「自分が何をしているのか知っている」と伝えます。p
void *
age
p
void *
(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 つはコンピューターに対するメモリ アドレスを表します。
(もちろん、仮想化されたメモリでは、上記は厳密には当てはまりません)