必須の型変換は、ポインタを理解しました


数日前の判断で  同じ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つの最初のアドレスへのポインタが、異なる結果をお読みください。

おすすめ

転載: www.cnblogs.com/al-fajr/p/11615413.html