ベストアンサー
(int *)p は変数pに格納されている値を、アドレスが整数を指すポインターの型に明示的に型キャストします。 pが格納する値は、上記の32ビット(4バイト)の整数を格納するために使用される4の最初のバイトのメモリアドレスです。
ポインタははメモリ内の特定の場所(ヒープまたはスタック)へのアドレスである必要があります。その場所に格納されるデータのタイプは、何でもかまいません
24/7
(int *)p は変数pに格納されている値を、アドレスが整数を指すポインターの型に明示的に型キャストします。 pが格納する値は、上記の32ビット(4バイト)の整数を格納するために使用される4の最初のバイトのメモリアドレスです。
ポインタははメモリ内の特定の場所(ヒープまたはスタック)へのアドレスである必要があります。その場所に格納されるデータのタイプは、何でもかまいません
span>であり、この式では、4バイトの整数であると指定しています(または想定しています)。
pの値は、別のポインターに割り当てる前にタイプキャストできます-
int *c = (int *) p;
または、pが保持するアドレスに格納されている値を取得するために逆参照することもできます-
int c = *((int *) p);
または、 pが実際にポインタ自体である場合、それなしで逆参照される可能性があります格納されている値が4バイトの整数であることがわかっているため、 明示的に タイプキャストされます。
Within簡単にするために、ポインタをnullチェックしていません。 nullポインタを逆参照するとクラッシュするため、ポインタがnullであることを確認することが最も重要です。
nullの例チェック-
if (p != null)
printf(“int is ‘\%d’”, *p);
アドレスが正しく、ポインタが nullでなく、メモリ位置に格納されているデータタイプが実際には整数である場合、コンソールはそれを正しく出力します。 。
これは、cでポインターを読み取る方法について、数年前に出くわした詳細でよく説明された記事です-クロックワイズ/スパイラルルール
その(int *)がそこで何をしているのかを理解するには、malloc(sizeof(int))が何をしているのかを理解することが役立ちます。 「右から左に分解します。
まず、sizeof(int)があります。これは、メモリ内の整数を表すために必要なバイト数を表す値です。これは、プログラミングしているコンピューターに応じて、4またはその他の数値になる可能性があります。
したがって、malloc()関数は、実際には4、la malloc(4)などのパラメーターを取得します。この関数は、 Cライブラリをメモリのどこかに移動し、4バイト(整数を含むのにちょうどいいサイズ)を確保します。
これで、malloc関数は常にそのメモリのアドレスを返します。そのコンピュータを思い出してください。メモリはシリアルに配置され、メモリ内のすべてのアドレスは一意です。malloc()はあまりスマートな関数ではありません。必要なメモリの量を指定すると、「ここにあります」と表示されます。何がわからないのです。そのメモリに入れたい-要求したメモリの量しか知りません。
malloc()はそのメモリに何を入れたいかわからないため、(void *)、つまり、任意のメモリアドレス、別名ポインタ。最近のほとんどのコンピュータでは、アドレスは64ビット値であり、8バイトのメモリで表すことができますが、コンピュータは異なります。 r、および異なるコンピュータは異なるサイズを返す場合があります。したがって、malloc()は(void *)形式で8バイトのデータを返す可能性があります。
最後に、malloc()が提供したメモリ内に移動して、を含むものとして扱う必要があります。整数。どうすればいいですか? malloc()は、どこかの空間にあるメモリへのポインタを提供してくれました。これを行うには、malloc()から取得したメモリアドレスが実際には整数のアドレスであることをコンパイラに通知します。したがって、(int *)。
これですべてを完了しました。すべてのステップを説明するのに苦労したため、コンパイラは必要なものを完全に理解します。8バイトが必要です。メモリ内の4バイトの場所を指すアドレス。整数が含まれます。
これが、式全体の意味です!