メモリ上の同一の型のいくつかの連続するオブジェクトを表示することは、 しばしば便利なことがあります; しかし、配列や動的な配列の断片は、プログラムの内に存在するポインタに よってのみしかサイスが決定できません。
これは、バイナリーオペレータ `@' による仮想配列という構造に よって可能になります。`@' の左側のオペランドは配列にしたい最初の 要素で、単一のオブジェクトです。右側のオペランドは配列の長さです。 結果は、全ての要素が左側の引数の型になるような配列値です。最初の要素は、 正に左側の引数であり; 2番目の要素は最初の要素と同様の型がメモリのバイト列として続いて接して いるとみなし、残りも同様です。例を示しましょう。もし、プログラムに
int *array = (int *) malloc (len * sizeof (int));
と書かれていた場合、あなたは array
の内容を次のようにして表示する
ことができます。
p *array@len
`@' の左側のオペランドはメモリ上に存在しなければなりません。 `@' を用いた方法によって作られた配列値は、予約語によるその他の 配列と同じようにふるまい、式の中で使われた場合はポインタを拘束します。 (これは、式が表示済みの変数の履歴を経由する場合に起こりえます。)