2017-06-03 24 views

答えて

1

ポインタはどこかを指し示す必要があるため、それがポインタなのですから。あなたはそれを間接参照

int *p; 

そして、あなたが持っている場合は、のような、例えば:

foo(*p); 

あなたはポインタデリファレンスを期待してintで終わります。

float *q; 

を、引数のために、あなたがこれを行うことができ、のは言わせて:あなたはfloatで始まる場合

は今、

int *p=q; 

その後、まさにあなたはこのポインタを期待していない場所今、ポイントするには? qが指しているところを指すことはできません。そこの唯一のものはfloatです。

だから、あなたは手動で、それを自分で行う必要があります:

int n= (int)*q; 
int *p= &n; 

をそして、もちろん、あなたがnは限りpポインタが間接参照されますようスコープに残っていることを確認する必要があります。また、*qを別の値に変更しても、pが指しているものには影響しません。しかし、それらは異なる質問になるでしょう...

2

私はそれはアレゴリーを介してそれについて考えるのは簡単だと思います。

ポインタが書かれた家の住所を持つ紙切れと考えてください。データのタイプは、その家に住んでいる人の名前です。

今、ポインタをキャストすることは、住所を同じ(大部分)に保ちながら、家に住んでいると思われる人の名前を変更することと同じです。

紙の名前を「アリス」から「ボブ」に変更しただけで、アリスが魔法のようにボブになるわけではありません。紙は家に影響しません。

そのようなポインタを使用すると、定義されていない動作が発生します。コードは、それが実際にはアリスだとボブに対処していると思う。

+2

ニース。おそらく、それをさまざまな種類のもの、つまり電話番号とMACアドレスを表す数字と考えることができます。 – juanchopanza

関連する問題