RoboCup Junior Japan Rescue Kanto OB
2005~2013
2005~2013
最近更新速度が右肩あがりなので久しぶりに思えますが、実はまだ二週間も立っていない配列の記事の続きです。
前回は、基本的な配列の使い方についての紹介を行いました。
今回は、タイトルにもあるように、配列についての実践的な使い方について紹介します。
まずはカウンタ変数を使った配列の実践例
例えば、配列の要素全てを連続で読み出したい、または書き込みたい場合に使われます。
配列の要素は数字で番号が振られていて、[ ]内に書かれますよね。
実はその数字、そのプログラム内で数字と判断できるものは何を書いてもいいんです。
従って当然、変数の名前を書いてもそれは有効なんです。
たがらこういうこともできます。
#include"stdio.h"
#define NUM 5
int main(void)
{
int i;
int data[NUM]
for(i=0;i<NUM;i++)
{
data[i]=i;
}
for(i=0;i<NUM;i++)
{
prinft("%d",data[i]);
}
}
このようにfor文を利用することで、いちいち全ての要素のプログラムを記述しなくとも
要素の書き込みや読み込みを連続して行うことが出来るのです。
次は関数の引数に配列を使う実践例です。
前に関数の引数の話はしましたが、普通の変数の場合は引数となった変数のデータは関数にコピーされます。
従ってどんなに関数にコピーされた引数が変更されようと、元の変数に影響はありません。
しかし、配列の場合はそうではありません。
配列の場合、要素単体を引数とする場合は変数と同じように関数側の値を変えても要素に影響はありませんが、
配列そのものを引数とする場合は、引き渡した関数側の配列の中身を変えると、元の配列の中身も変化してしまうのです。
これにはアドレスというものが深く関わっていますが、ここでは一先ず触れないことにしておきましょう。
つまりプログラムにすると、
#include"stdio.h"
#define NUM 5
void input(int a;int x[])
{
x[1]=5;
a=5;
}
int main(void)
{
int i;
int data[NUM]
for(i=0;i<NUM;i++)
{
data[i]=i;
}
input(data[0],data);
for(i=0;i<NUM;i++)
{
prinft("%d",data[i]);
}
}
この時、関数inputの前ではdata[0]=0、data[1]=1になっていますね。
しかし、関数inputの後ではdata[0]は0のままですが、data[1]は5に変わってしまっているのです。
配列の名前が違うのでややこしいですが、配列の場合は、引数として引き渡すと、
元の配列と引渡し先の関数の配列は名前は違っても要素の中身は同じになるのです。
これが配列の大きなな特徴です。これは非常に意味があって、アドレスを習ったり、配列をもっと複雑に使うようになると
この重要さが理解できるようになると思います。
因みに配列を引数として呼ぶ場合は、メイン文の方の引数の部分(実引数)は配列名だけにしてください。
それで関数の方(仮引数)は普通に配列の定義と同じように記述して下さい。一次元配列の場合は要素の所は空でも大丈夫です。
最後に紹介するのは多次元配列です。
C言語では、多次元配列と言って、配列の中に配列、配列IN配列を作成することができます。
多次元配列の定義はこんな感じ。
int x [4][5];
こんな風に[]の数を後ろから増やしていく形式を取ります。これでx[4]を一つの要素とした要素5個の配列を作った訳です。
要素の総数は4×5で20個ですね。
forの2重ループで2次元平面での座標取りなんかをする場合に非常に便利です。
この他の使用方法は他の配列をまぁ大差ありません。同じように使うことができますね。
また、2次元だけでなく、3次元、4次元と、同じようにすればもっと大きな多次元配列も作成できます。
配列の実践的な用法はこんな感じでしょうか。実践と言いつつ、実用的なプログラムが一切出て来なかったのは仕様です。
「実用なんたら・・・って名前の授業ほど実用性がない」という例の高専の法則に肖ってみたつもりです。内輪ネタですね。
という訳で名ばかりの実践編は以上です。配列についてはひと通り書いたつもりですが、まだ、色々残ってはいるので、
この先もっと他の構文についての説明が終わった辺りでまた紹介したいと思います。
それでは今回はこのへんで
(^・ω・)ノ RadiumProduction in RoboCup Junior
前回は、基本的な配列の使い方についての紹介を行いました。
今回は、タイトルにもあるように、配列についての実践的な使い方について紹介します。
まずはカウンタ変数を使った配列の実践例
例えば、配列の要素全てを連続で読み出したい、または書き込みたい場合に使われます。
配列の要素は数字で番号が振られていて、[ ]内に書かれますよね。
実はその数字、そのプログラム内で数字と判断できるものは何を書いてもいいんです。
従って当然、変数の名前を書いてもそれは有効なんです。
たがらこういうこともできます。
#include"stdio.h"
#define NUM 5
int main(void)
{
int i;
int data[NUM]
for(i=0;i<NUM;i++)
{
data[i]=i;
}
for(i=0;i<NUM;i++)
{
prinft("%d",data[i]);
}
}
このようにfor文を利用することで、いちいち全ての要素のプログラムを記述しなくとも
要素の書き込みや読み込みを連続して行うことが出来るのです。
次は関数の引数に配列を使う実践例です。
前に関数の引数の話はしましたが、普通の変数の場合は引数となった変数のデータは関数にコピーされます。
従ってどんなに関数にコピーされた引数が変更されようと、元の変数に影響はありません。
しかし、配列の場合はそうではありません。
配列の場合、要素単体を引数とする場合は変数と同じように関数側の値を変えても要素に影響はありませんが、
配列そのものを引数とする場合は、引き渡した関数側の配列の中身を変えると、元の配列の中身も変化してしまうのです。
これにはアドレスというものが深く関わっていますが、ここでは一先ず触れないことにしておきましょう。
つまりプログラムにすると、
#include"stdio.h"
#define NUM 5
void input(int a;int x[])
{
x[1]=5;
a=5;
}
int main(void)
{
int i;
int data[NUM]
for(i=0;i<NUM;i++)
{
data[i]=i;
}
input(data[0],data);
for(i=0;i<NUM;i++)
{
prinft("%d",data[i]);
}
}
この時、関数inputの前ではdata[0]=0、data[1]=1になっていますね。
しかし、関数inputの後ではdata[0]は0のままですが、data[1]は5に変わってしまっているのです。
配列の名前が違うのでややこしいですが、配列の場合は、引数として引き渡すと、
元の配列と引渡し先の関数の配列は名前は違っても要素の中身は同じになるのです。
これが配列の大きなな特徴です。これは非常に意味があって、アドレスを習ったり、配列をもっと複雑に使うようになると
この重要さが理解できるようになると思います。
因みに配列を引数として呼ぶ場合は、メイン文の方の引数の部分(実引数)は配列名だけにしてください。
それで関数の方(仮引数)は普通に配列の定義と同じように記述して下さい。一次元配列の場合は要素の所は空でも大丈夫です。
最後に紹介するのは多次元配列です。
C言語では、多次元配列と言って、配列の中に配列、配列IN配列を作成することができます。
多次元配列の定義はこんな感じ。
int x [4][5];
こんな風に[]の数を後ろから増やしていく形式を取ります。これでx[4]を一つの要素とした要素5個の配列を作った訳です。
要素の総数は4×5で20個ですね。
forの2重ループで2次元平面での座標取りなんかをする場合に非常に便利です。
この他の使用方法は他の配列をまぁ大差ありません。同じように使うことができますね。
また、2次元だけでなく、3次元、4次元と、同じようにすればもっと大きな多次元配列も作成できます。
配列の実践的な用法はこんな感じでしょうか。実践と言いつつ、実用的なプログラムが一切出て来なかったのは仕様です。
「実用なんたら・・・って名前の授業ほど実用性がない」という例の高専の法則に肖ってみたつもりです。内輪ネタですね。
という訳で名ばかりの実践編は以上です。配列についてはひと通り書いたつもりですが、まだ、色々残ってはいるので、
この先もっと他の構文についての説明が終わった辺りでまた紹介したいと思います。
それでは今回はこのへんで
(^・ω・)ノ RadiumProduction in RoboCup Junior
カレンダー
最新CM
カテゴリー
らじぷろ目次
らじぷろ検索機
最新記事
(01/01)
(01/03)
(08/27)
(04/29)
(01/01)
(11/20)
(09/06)
(09/04)
(08/09)
(08/06)
(07/27)
(05/29)
(03/15)
(01/01)
(05/07)
プロフィール
HN:
Luz
性別:
男性
アーカイブ