数日前の判断で 「同じ2つの変数に値ポインタポイントが異なることがあり 、」 これらの言葉は、単に結論を覚えポインタ型の概念に自分自身を発見しました。だから、いくつかの情報へのアクセスは、それのいくつかは、知識のレコードポインタの型変換とポインタ型に関連します。
いくつかの使用
始める前に、のは、情報の一部が使用されます見てみましょう。
1.アドレス、バイト、ビット
ビット(ビット)コンピュータは、データの最小単位です。すべての状態は0または1することができます。
バイト(バイト)は、記憶容量の測定単位であり、各バイトは8ビット(1バイト= 8ビット)からなります。
これは、メモリのアドレス、各バイト(バイト)の数として理解することができます。
それらの関係のメモリを比較することができるでは、メモリは、建物、バイト(バイト)の各レイヤを構築され、アドレスは、各レイヤのフロア番号、桁(ビット)は、それぞれの層は有している部屋であります8室。
2.変数のメモリ
コンパイラ型の変数、メモリ空間内のアプリケーション。例えば、32ビットと64ビットのアプリケーションスペースのINT 4バイトを入力し、以下のように、コンパイラの床4を適用すると理解される「ワークエリア」。
3.ポインタ変数
これは、プログラムデータ・メモリのアドレスポインタを参照します。C言語では、変数、ポインタ、変数と呼ばれるこのポインタ変数を格納することを可能にします。
ポインタ変数のエフェクトタイプ
1 int型; 2 INT * P; 3 P =& 。 4のprintf(" %のP%d個の\ n "、P、* P);
上記の手順では、「&」演算子は、変数をメモリ空間の先頭アドレスを除去し、「*」演算子を介して第1のアドレスデータメモリ空間が配置されて除去します。
我々は、バイト、複数の、以前のメモリ格納変数に言及しました。そして、最初のケースではポインタ変数のみを見つけるために、メモリ領域のアドレス(バイトアドレス)を知っています。それはどのように行うことですか?のは、ポインタ変数を宣言してみましょう。
我々は、例えば、対応するタイプを宣言し、それを指すように変数の種類に基づいて、ポインタ変数を宣言します。
1 int型; 2長B。 3チャーC。 4 5 INT * PA =&。 6長い* PB =&B。 7のchar * PC =&C;
どんなにポインタ変数の種類、格納された値は、アドレス(INT)ではありません。だから、文の異なるタイプの役割は何ですか?その答えは、所定のメモリ内のポインタの各移動のバイト数ということです。
定義された、例えば「INT * PA =&A」、値、int型4バイトは、ポインタが最初のアドレスの先頭から移動されたときに、4つのバイトを読み出します。同様に、short型2バイト、ポインタ移動の2バイト。ポインタ型を宣言することにより、ポインタ変数の値を取得するには、どのように多くのバイトごとの動きを伝えます。
同じ2つの変数への値のポインタ点が異なっていてもよいです
「二つの同じ値タグ」とは、2つのポインタが同じ第1のアドレス変数を指していることを意味します。しかし、バイト・ポインタの動きの異なる数のポインタ変数の異なるタイプは、それが可能であれば異なるデータを読み出します。
ポインタ変数の種類を達成するために、同じアドレス、ポインタ型を指しています。
1ショートA = 1。 2ショート* P1 =&。 3 INT * P2 =(INT *)P1。 4のprintf( "%d個の%のD"、* P1、P2 *)。
上記の例では、2バイトのポインタ変数short型の各動きを読み取り、各4バイトのint型のポインタ変数に読み込みます。
次に、同じ第1のアドレス、撮影した別の値と、ポインタ型を渡します。
#INCLUDE 1に<stdio.h>。 )(メイン2 INT 3 { 4ショートC [2]; //二つの連続したメモリ空間へのアプリケーション同等、各空間2バイト 5個のC [0] = 1; / /は、最初の短い空間が割り当てられている1。 6 C [1] = 1; //第2短スペースに割り当てられている1。 7短いC * = P1; P1点C // []先頭アドレス 8 INT * P2 = (INT *)P1; // P2点C []最初のアドレス、およびint型にキャスト 9。 10のprintf( "点P1:%のp \のNP2点:Pの%の\のN-"、P1、P2); 11のprintf(。 "P1除去:%Dの\のNP2がとら:D%\ N-"、P1 *、P2 *)、 12は0を返す; 13}であります
対応する結果は以下のとおりです。
P1点:000000000062FE30
P2点:000000000062FE30
p1は:. 1除去
65537:取らP2を
バイナリ変換では、あまりにも、10000000000000001 65537です。フロントキャストがリードポインタ2つのバイトを検証することにより、4つのバイトは、変換後に読み出します。同じ2つの最初のアドレスへのポインタが、異なる結果をお読みください。