0

私は次のCコードを持っていて、それを理解しようとしています。

char buffer[128];
A* a = (A*) &buffer[sizeof(A*)];

最初、私はこれでこれをやろうとしていましたが、A* a = (A*) buffer[sizeof(A*)]; これは私に警告を与えます、そしてそれはこれが実際に私にcharを与えてsizeof(A*)それをキャストするからだと思いますか?&もう1つの混乱は、バッファがすでに配列の最初の要素へのポインタであるため、にキャストするポインタを取得するために演算子が必要な理由ですA*。誰かが私がこのコードを理解するのを手伝ってもらえますか?

ありがとう!

4

2 に答える 2

1

問題の行は 128 バイトの を受け取り、bufferのインデックスを見てsizeof(A*)、それへの参照を返し、 type のポインターにキャストしますA

もう 1 つの混乱は、バッファーが既に配列の最初の要素へのポインターであるため、A* にキャストするポインターを取得するために &operator が必要な理由です。

これはbuffer、添え字を使用して配列にインデックスを書き込む[]と、メモリ位置自体ではなく、バッファーのそのインデックスでポイントされた値が返されるためです。先頭に追加&することで、そのデータのメモリ アドレスを取得しています。

于 2012-10-17T18:55:08.147 に答える
1

(A*)- データ構造体 A のポインタにキャスト

&buffer[]- buffer が指すメモリ内の場所に移動する

[sizeof(A*)]- A データ構造へのポインタのサイズをインデックスとして使用する

于 2012-10-17T18:55:14.977 に答える