0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

今回は、プログラミングをする上でどの言語でも使用する配列というデータ構造が実際どういうものなのかを紹介してきたいと思います。

配列とは

配列はよく以下のような形で見られます。

int numbers[3] = {3, 5, 1};

上記は、数値の配列ですが何を表しているのでしょうか?
これは、連続したメモリ領域に3つの数値データを持たせておくということを表しています。

配列の条件

  • 配列には同じデータ型のデータしか入れられない
  • 指定した配列の長さを超えるインデックスを指定してデータが入れられない
    上記の条件があります。
    これは、以下の問題が発生するからです。

問題

  1. データ型によって、使用するバイト数が違うためデータを取得できない
[3, "ああ", true]

このような配列になった場合、データ型が決まっていないため何バイトを先頭から指定したら3が取得できるか判断できません。

  1. 連続して最初に固定値のメモリ領域を確保するため、続きのメモリが空いてるとは限らない

例えば、最初の例でint型の長さ3の配列を作成しました。このときメモリ上では3つの数値データが入る分の領域を確保しています。インデックス4にデータを入れようとすると、確保していない部分のメモリを使うことになります。この領域が他の用途で使用されていた場合、データを保存できません。

疑問

Q. jsやPHPでは、違うデータ型のデータを配列に入れる事ができてしまうのはなぜ?
A. これは、配列内のデータの中で一番多いバイト数のデータに全データ合わせるからです。

[3, "あああ", 4]の例で説明すると、3が2バイト、"あああ"が3バイト、4が2バイトです。
これだと"あああ"の3バイト分の領域に合わせて他のデータも確保します。
つまり、2 + 3 + 2の7バイト分ではなく、3 + 3 + 3の9バイト分のデータを確保し、3倍と読み取ればデータを正しく読み取れる状況を作っているのです。

まとめ

配列についてコンピュータサイエンスの視点から解説しました。よく発生するエラーの原因が少しでも理解いただければ幸いです。

私は大学でコンピュータサイエンスを学んでいないため、誤りがあるかもしれません。ご指摘いただけると幸いです。

ここまで読んでくださり、ありがとうございました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?