[ 前へ | 目次 | 次へ ]

配列

ここでは、複数の値を格納できる変数である、配列について解説します。

スポンサーリンク


配列

複数の値を一つの変数名で表現したい場合には、配列を使用します。

配列を宣言するには、以下のように記述します:

変数型   配列名[ 要素数 ] ;

ここで要素数は、配列に格納できる値の個数を指定します。なお、以下のように変数型の部分に要素数を付ける記述も可能です。

変数型[ 要素数 ]   配列名 ;

これら2 通りの宣言方法は、どちらも全く同じ処理となります。

例として、int 型の値を格納する配列を用意してみましょう:

または、

とします。これで5 つの整数値を格納できる配列が用意できました。

配列に値を代入したり、呼び出したりするには、変数名の右に [ インデックス番号 ] をつけて、 普通の変数と同じように行う事が可能です:

- 実行結果 -

1

これを実行すると 1 が表示されます。つまりa の中の、3 番目の要素に値を格納したわけです。

インデックス番号は、配列の要素に割り振られる番号で、 0 番から(要素数-1)番までが用意されています。要素数番まででは無い事に注意してください。 例えば、上の例では0,1,2,3,4 番までが用意されており、5 番は存在しません。

配列はその用途から、繰り返しの制御構文と併用される事が多いでしょう。 例として、0 から10 までの整数の2 乗を、配列に格納してみましょう:

- 実行結果 -

64

これを実行すると 64 が表示されます。

配列同士の代入

配列のインデックス番号を指定せずに、配列名のみを用いて代入を行った場合は、配列の全要素が代入されます。

- 実行結果 -

2

このプログラムを実行すると2 が表示されます。

要素数の異なる配列を代入する場合には、少し注意が必要です。 そういった場合、代入先の配列の要素数が変更され、代入したものと同じになります。

- 実行結果 -

2

このプログラムを実行すると、結果は「 2 」が表示されます。そして、a の要素数は20 になります。

C言語系の他言語との違いには注意が必要

ところで、多くのC言語系の他言語では、配列は参照型であり、代入先と代入元の変数は、同一の変数のように振舞うようになります(同じデータ領域を参照するようになる)。この場合、代入後に行った、代入先の配列に対する変更が、代入元の配列にも反映されます。

一方、VCSSLでは配列も値型であり、代入は単純に、全要素値のコピーとなります。同じデータ領域を参照するようにはなりません。従って、代入後に、代入先の配列に対して変更を加えても、それは代入元の配列に反映されません。

VCSSLは基本的に、C言語系の他言語となるべく同じ要領で扱えるようになっていますが、この違いについては注意が必要です。

多次元配列

配列は、インデックスを複数付ける事もできます。これを多次元配列と呼びます。

多次元配列の宣言・使用方法は1 次元の場合と基本的に同じで、 [ ] を複数付けるだけです:

- 実行結果 -

16

これを実行すると 16 が表示されます。

上の例のa は2 次元の配列ですが、 [ ] の数を増やすだけで何次元でも利用可能です。

配列の要素数を取得する

プログラムの実行中に、配列の要素数を調べたい場合はよくあります。そういう場合には、length 関数を使用します。

length 関数は、配列の指定された次元の要素数を調べて、結果をint型で返します。 最初の引数に配列変数を、続く引数に次元を指定します。 次元の指定は、配列の左から 0 次元目, 1 次元目, 2 次元目, ...と数えます。

- 実行結果 -

3

これを実行すると 3 が表示されます。 これは a の左端から数えた2 番目(0, 1, 2 と数える)、つまり右端の次元の要素数です。 同様にlength( a, 0 )は 1 を、length( a, 1 )は 2 を返します。

第 2 引数の省略は非推奨

なお、 array 関数で 2 つめの引数を省略すると、各次元の要素数をまとめた配列が返されます。

上の例では、length(a) とすると、要素数3 のint 配列が返されます。 しかし、この機能は古い互換性維持のためのもので、配列の次元を右から 0, 1, 2 と数える仕様となっているため、混同を招くという問題があります。

従って、length 関数で2つめの引数を省略するのは、現在では非推奨となっています。

配列の要素数を変更する

配列の要素数を変更したい場合は、alloc 演算子を使用します。この演算子は使用方法が特殊で、以下のように使用します:

alloc[要素数]   配列変数 ; // 1 次元の場合
alloc[要素数][要素数]...[要素数]   配列変数 ; //多次元

このように記述すると、配列変数の要素数が、alloc の後の[ ] 内に記述した要素数に変わります。

具体的に使用してみましょう。以下のように記述し、実行してみてください:

- 実行結果 -

20

これを実行すると 20 が表示されます。 このように、alloc 演算子によって、配列変数a の要素数を、10 から20 に変更できました。

なお、allocの前後では、配列の各要素の値は維持されます。 つまり、もし上でa[ 1 ] に最初255が入っていたとすると、 alloc 後のa[ 1 ] も255 のままです。多次元の場合でも同様で、 同じインデックスに対応する要素は、同じ値に保たれます。

要素数1の配列を、配列でない変数に代入する

配列を、配列でない普通の変数に代入する事は、一般にはできません。

しかし例外があります。それは配列の要素数が1 の場合です。 要素数が1 の配列は、データ的には普通の変数と変わらないので、普通の変数へ代入する事ができます:

- 実行結果 -

1

上の例を実行すると 1 が表示されます。

配列の全要素に対する代入と演算

配列の全要素に同じ値を代入したい場合、

配列 = 値 ;

といった処理が可能です。例えば、

- 実行結果 -

1

これでi の全要素に1 が代入されます。

また、配列の全要素に、同じ値で同じ演算を行いたい場合は、以下のような略記も可能です:

- 実行結果 -

3

上の処理では、i の全要素に2 が加算され、3 となります。



スポンサーリンク



この階層の目次
お知らせ

リニアングラフ3Dをアップデート、次期版(Ver.6)の開発もスタート
2023/09/04 - リニアングラフ3Dのアップデート版をリリースしました。また、次期メジャーバージョンである Ver.6 系の開発も開始しました。それぞれについて解説します。

AIの補助により、英語版ドキュメントを大幅拡充へ - 作業の舞台裏も紹介!
2023/05/28 - RINEARNでは今後、ChatGPT等のAIの補助により、英語版ドキュメントを大幅に拡充していく方針です。既に行った英訳作業の様子なども紹介しつつ、詳しく解説します。

リニアングラフ3Dをアップデート、API関連機能などを拡充
2023/05/18 - リニアングラフ3Dのアップデート版をリリースしました。主に、Java言語やVCSSLでの制御機能などを拡充しました。更新内容をそれぞれ詳しく解説します。

新着
[公式ガイドサンプル] 各種の図形や画像を描画する

「VCSSL 2DCG開発ガイド」内のサンプルコードです。図形や画像などを描画します。
2022/12/16
角度の「度」とラジアンとを相互変換し、図示もするツール

45度などの「度」の値と、ラジアンの値とを相互に変換できるツールです。対応する角度の図示もできます。
2022/11/22
[公式ガイドサンプル] 立体モデルを回転させるアニメーション

「VCSSL 3DCG開発ガイド」内のサンプルコードです。立体モデルを、アニメーションで回転させ続けます
2022/11/18
[公式ガイドサンプル] 立体モデルを回転させる

「VCSSL 3DCG開発ガイド」内のサンプルコードです。立体モデルを、指定した角度だけ回転させます。
2022/11/17
[公式ガイドサンプル] 四則演算の計算順序や、カッコを使った順序指定

「VCSSLスタートアップガイド」内のサンプルコードです。四則演算が計算される順序や、カッコを使って順序を指定する方法を例示します。
2022/10/31