C/C++の配列の宣言と要素の表し方
配列は、同じ名前で複数の値を持つことができる変数であることは既に説明したが、今回は配列についてもう少し詳しく説明していきたい。
多次元配列
多次元というと、一般的には、平面ならX軸とY軸、立体ならこれにZ軸が加わるというように、同時に複数の軸を持つことをいう。
配列において多次元とは何かというと、複数の添え字を持つことをいう。前述の n[ 5 ] のように添え字が1つの配列は1次元配列という。しかし n[ 5 ][ 4 ] のように2つの添え字を持つと2次元配列、 n[ 5 ][ 4 ][ 3 ] のように3つの添え字を持つと3次元配列となり、これらは多次元配列と呼ばれる。
2次元配列を要素と共に宣言する場合は、以下のように記述する。
int n[ 2 ][ 3 ] = { { 1, 2, 3 }, { 4, 5, 6 } };
配列の添え字と要素の数との対応に注目してみると、まず内側の { 1, 2, 3 } と { 4, 5, 6 } は、それぞれが3つの要素を持つ配列であることを表している。そして外側の {...} は、2つの要素を持つ配列であることを表している。
つまり n[ 2 ][ 3 ] は、int型の要素を3つ持つ配列を2つの要素として持つ配列、ということになる。いわば配列を要素とする配列だ。文章にするとぎこちないが、2次元配列の要素を表1のような形式で眺めてみると、 n[ 0 ][ 0 ] = 1、 n[ 1 ][ 2 ] = 6 であることがわかるだろう。
| 後の添え字の値 | 0 | 1 | 2 | |
| 前の添え字の値 | 0 | 1 | 2 | 3 |
| 1 | 4 | 5 | 6 |
これまで述べてきたことは、double型など残りのデータ型でも基本的に同じだ。
文字列の多次元配列
ここで再びchar型の配列に戻りたい。多次元配列はどのように記述すればよいのだろう。以下に例を示す。
char lang[ 3 ][ 10 ] = { "Japanese", "English", "French" };
ここでも添え字と要素の数との対応に注目したい。char型の配列では、最後の要素が'\0'であるため、添え字の数-1が文字列の実質的な最大の文字数となる。そうすると、 lang[ 3 ][ 10 ] は、3つの要素が最大9文字の文字列である配列ということになる。
このとき、それぞれの要素の値は lang[ 0 ] = "Japanese" 、 lang[ 1 ] = "English" 、 lang[ 2 ] = "French" となっている。このあたりはint型などの配列とは異なるところだ。もちろん lang[ 0 ][ 0 ] = 'J' 、 lang[ 1 ][ 2 ] = 'g' というように、個別のchar型の要素でそれぞれの文字を表すこともできる。
配列が必要な理由
通常の変数でデータを表すことができるのに、なぜ配列というのもが必要なのだろうか。それは、複数のデータを取り替えながら同じ処理を行うことが、プログラミングの場面でよくあるからだ。
たとえば注文された商品の価格を合計するときに、各商品ごとにitem1, item2などと変数を宣言するのは面倒だ。注文される商品の数は一定ではないし、データの数が膨大になったら、もう途方にくれるしかないだろう。
配列なら、添え字を変えれば個別のデータを表すことができるので、価格を合計するといった、何度も同じ処理をするには都合が良いのだ。プログラミングを理解するにつれて、配列が必要な理由をより強く認識できるようになるはずだ。
次回は、C/C++言語の特徴的な機能であるポインタを紹介したい。これは配列とも深い関係がある。
- 特集: C/C++のイロハ:メモリ管理からオブジェクト指向まで (15件)
- ホワイトペーパー
-
【導入事例】-JTB様 2,000店の提携販売店、海外支店に向け配信するウェブコンテンツの内容を管理運用負荷とコスト削減を実現
-
【無線 LAN のトラブルシューティング】Wi-Fi のアップタイムとセキュリティの改善方法
-
LANDesk® Host Intrusion Prevention System 〜ゼロデイ攻撃を即座に阻止する新しいHIPSソリューション
-
マイクロソフトがご提案する コミュニケーション&コラボレーション環境
〜 the 2007 Office system と Exchange Server 2007 が実現する新しいワークスタイル 〜
-
〜人と組織の課題を解決〜 WEBサイト運営支援サービス
- 話題のタグ
無料の「Oracle Database XE」で高速バッチ処理:実装のポイント
Firefoxで情報をカンタン・ベンリに整理する
iPhone Safari、Acidテストでは高得点でも…… Firefoxは載らないの?:WebサイトのiPhone 3G対応問題を考える(ソフト編)
WebサイトのiPhone 3G対応問題を考える(ハード編)
フォトレポート:時代を振り返る--「MS-DOS 4」のインストール
SOAと仮想化の関係は?--常に進化を続けるBEAのミドルウェア戦略
ウェブ開発の生産性はどうしたら上がる?--MODIPHI Appsで半日で作るマッシュアップサイト(1)
プロジェクトの進行でよくある4つのトラブル
JailBreakついに:PwnageTool公開
iPhoneに付く指紋が…… ひとまずおすすめのシリコンケース
contentプロパティでコンテンツを追加する(2):FirefoxとSafariのCSS
iPhone 24時間耐久レース:バッテリーは実際何時間?
フォームデザイン虎の巻:フォームの基礎をおさえる
Techno Exchange
DELLが掲げる「新・仮想化アセスメントサービス」
ZDNet Japan ホスティング特集
ZDNet Japan Green IT