に等しい((文字**)*ん、私が持っている表現に何が起こるポインタを理解する。 ?</p> <pre><code>char *p, *q; p = malloc(1); //for the purpose testing only p[0] = '!'; q = *((char **)p); printf("p=%x q=%xn", p, q); printf("p=%c q=%cn", p, q); </code></pre> <p>何の鋳造の警告がなかった、と出力は次のようになります:どのようなCで
p=1a9008 q=21
p q=!
?q
に割り当てられ、すなわち*((char **)p)
割り当て後に変更q
の型を持つ
編集:?errがありますまたは私のコードで。私は完全に動作する例に遭遇したコード断片からそれを掘り下げようとしていましたが、pのchar型の値の例を誤って使用しました。元のコードをさらに調べた後、pにポインタ値が割り当てられました。だから、pはポインタへのポインタです。
プログラマーがキャストを使用しているとき、彼らは通常、何か間違っています。 –
その行は基本的にナンセンスです。**は未定義の動作**を呼び出します。 –
ありがとうございます。私が見つけたいくつかのコードで、それが何をしているのか把握しようとしていました。 (私はC.の初心者です) –