配列がnull要素を持っているとき、どのように配列要素が格納されていますか?

Nelssen:

私はこれが基本である知っているが、私は私の解釈を確認し、情報源を見つけることありませんよ。

目標は、あなたが私の解釈があります下の配列は、メモリに格納されているかを理解することです。

4サイズの配列が似ている場合:

array[0] = 0

array[1] = null

array[2] = 2

array[3] = 3

それは、例えば、次のように、ヌルをカウントせずにメモリに隣接して保存されていますか?

[0], [2], [3]

あなたはヌル位置に要素を追加する場合([1])、次の要素がメモリ内で1位を引っ張っているよりも?

[0]、[1] 新規作成)、[2] プル)、[3] プル)

参考文献(Amoungその他):

kaya3:

null一般的に、すべてのビットがゼロであることにより、メモリ内に表されています。それは関係なく、かどうかの事実であるnull配列や他の場所に保存されています。


私は、配列が何であるかについて、あなたの質問では、いくつかの混乱があると思います。アレイは、シーケンス内のすべての要素が同じタイプを有する固定長の配列です。配列の長さは、配列が作成されたときに決定され、(必要に応じて、異なる長さで新しい配列を作成することができますが)長さが後から変更することはできません。

上記は、あなたがどの教科書から得るが、JavascriptとPHPのようないくつかの言語は平均の事に言葉「アレイ」を使用することを心に留めておこう何でない配列。A Javascriptの「アレイ」は本当にリスト、およびPHP「アレイ」は本当にリストとの間に奇妙な雑種である連想配列A Pythonはlistいくつかのソースが誤っ一つとしてそれを参照しても、アレイはありません。これらの他のデータ構造は、すべてあなたがインデックスにある要素を挿入することができますが、「要素を挿入します」それは長さ接頭辞だ場合(すなわち、アレイ上のみ操作はインデックスの値を取得するために、ある1によって配列の長さを増加させることが必要となるため、インデックスの値を設定し、アレイ上の操作ではない、そして配列)配列の長さを取得します。あなたは、アレイを使用することができます表す可変長シーケンスを、あなたはそれが何を表すかの配列を混同してはなりません。

特別な治療法はありませんnullメモリ位置に関しては、アレイが有する場合null、インデックス1において、インデックス1に対応するメモリ位置は、メモリ表現を含みますnullアレイの全体のポイントは、直接メモリ位置を見つけるためにインデックスを使用することができるように、各インデックスは、メモリ位置に対応するということです。配列要素のメモリアドレスのための式であります:

(のアドレスarray[index])=(のアドレスarray開始)+ index*(配列要素あたりのバイト数)

インデックス1の要素は、メモリ位置を占有していない場合には、インデックス2の要素は、この式に基づいて適切な場所にないだろう。


場合は、自然のフォローアップの質問は、あるnullアレイ内のメモリに数と同じように表現され0、どのようにプログラムは値があるかどうかを伝えることができますnull0

すべての配列要素が事の同じ型でなければならないので、null配列の要素がある場合は、配列にのみ意味があるの参照ではなく、プリミティブ整数。たとえば、Javaであなたが持っている可能性nullにはInteger[]、配列ではなくint[]配列。表すゼロのビットがそうnull数を表すゼロビットと混同されない0参照の配列を読み取る誰もが参照としてではなく、整数として内容を解釈することになっているので、。プリミティブ整数の配列を読み取る誰も数としてこれらのビットを解釈すべき0ではなく、null参照。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=12857&siteId=1