>  > CRIMSON(クリムソン) CLUB LINEA L612 (クラブリネア L612) 17インチ 8.5J PCD:100 穴数:4 inset:34 DISK TYPE:SUPER LOW カラー:シルバーポリッシュ [ホイール1本単位]/H
第22回
データ構造(1)~配列とその扱い
{yahoojp} {grapecity.com}

CRIMSON(クリムソン) CLUB LINEA L612 (クラブリネア L612) 17インチ 8.5J PCD:100 穴数:4 inset:34 DISK TYPE:SUPER LOW カラー:シルバーポリッシュ [ホイール1本単位]/H

配列は同じ型の変数が並んだものですから、個々の要素の扱いは通常の変数と変わりません。まず、値の代入方法を紹介します。

CRIMSON(クリムソン) CLUB LINEA L612 (クラブリネア L612) 17インチ 8.5J [ホイール1本(単品)] PCD:100 穴数:4 inset:34 DISK TYPE:SUPER LOW カラー:シルバーポリッシュ [ホイール1本単位]/H 【USA在庫あり】

配列の個々の要素に値を代入するには、以下のように代入演算子=を使います。
num[0] = 100;
num[1] = 200;
num[2] = 300;
 :
もちろん、通常はこんな悠長な記述はしません。配列の宣言時にすべての要素の値を示し、初期化することができます。
unsigned short int num[] = {100, 200, 300, 400, 500, 600};
{ }内に値を「,」で区切って列挙するだけです。このようにすれば、[ ]内に最大要素数を示す必要はありません。{ }内に列挙した値の数だけの要素が自動的に確保されます。この場合、配列の各要素と添字の関係は図2のようになります。


各要素への代入

配列の各要素に規則性を持った値を代入するには、forループを使うのが便利です。例えば RAYS(レイズ) VOLK RACING TE37 ultra LARGE P.C.D (ボルクレーシング TE37 ウルトラ ラージ P.C.D) 20インチ 8.5J PCD:139.7 穴数:6 inset:20 FACE-2 カラー:マットブルーガンメタ [ホイール1本単位]M、10個の要素を持つunsigned short int型の配列に、100・200・300……と100ずつ増加する値を代入する処理は 【クーポン利用で最大1200円OFF!】オーリンズ ショックアブソーバー ロード&トラックシリーズ Type HAL スバル インプレッサ GVB用 ショック単体 1台分セット【車高調】OHLINS SHOCK ABSORBERS Road&Track Series【通常ポイント10倍!】、リスト1のように記述できます。

カウンタ変数iは0から1ずつ増加するので、その値を配列の添字に使い、同時に(i + 1)の100倍を添字で示す要素の値として代入します。

継続条件は「i < 10」となっているので、iが9になるまでループが繰り返され、10になったら処理をせずにループを抜けるので、配列のすべての要素に値が代入されます。

リスト1:配列に100ずつ増加する値を代入していく(ex2201.c 15インチ サマータイヤ セット【ノア ハイブリッド(80系)】A-TECH シュナイダー SQ27 メタリックブラック 6.0Jx15RADAR RPX800 195/65R15、EX2201.EXE)
unsigned short int num[10]; /* 整数を格納する配列 */
int i; /* カウンタ変数 */
for (i = 0; i < 10; i++) {
 num[i] = (i + 1) * 100;
}
この処理を実行形式としたソースは [ESPELIR]DA16T キャリイ(4WD)用スーパーダウンサス、"ex2201.c"というファイル名でサンプルに収録しています。

キーボード入力を要素に受け取る

キーボードやファイルから順次数値を読み込み、

CRIMSON(クリムソン) CLUB LINEA L612 (クラブリネア L612) 17インチ 8.5J PCD:100 穴数:4 inset:34 DISK TYPE:SUPER LOW カラー:シルバーポリッシュ [ホイール1本単位]/H
17インチ サマータイヤ セット【適応車種:オデッセイ(RC系)】WEDS レオニス SK パールブラックミラーカット 7.0Jx17ヨコハマ エコス ES31 215/55R17!【Dotty】 DIA-GT シートカバー 1台分 BMW Mini 5ドア (5人乗り)にお勧め! F55系 2014/04→MC迄 品番:W514.カローラスプリンター(95.4~00.8)AE110 ■アクレブレーキパッド ライトスポーツ フロント左右セット■適合詳細要確認■代引き不可■,15インチ サマータイヤ セット【適応車種:ムーブ ラテ(L550、560系)】HOT STUFF Gスピード P02 メタリックブラックポリッシュ 4.5Jx15LEMANS V LM5 165/55R15

CRIMSON(クリムソン) CLUB LINEA L612 (クラブリネア L612) 17インチ 8.5J PCD:100 穴数:4 inset:34 DISK TYPE:SUPER LOW カラー:シルバーポリッシュ [ホイール1本単位]/H

、それを配列に格納していく処理もforループで対応できます。キーボードから順次数値を読み込んで、それを配列に格納していく処理はリスト2のようになります。

キーボード(標準入力)からの入力にはgets関数を使って文字列として受け取り、それをatoi関数で整数に変換します。それぞれの関数の書式は以下のようになっています。
char *gets(char *);
標準入力から受け取った値を、引数のchar型ポインタが指す配列にNULL(\0)終端の文字列として格納します。エラーの場合はNULLが返ってきます。

int atoi(const char *);
引数を数値を表す文字列として受け取り、それを整数に変換して返します。

引数の前に記述されている"const"は、処理の中で値を直接変更できないようにする修飾子です。

リスト2:標準入力から受け取った数値を配列に格納する~for版(ex2202.c 15インチ サマータイヤ セット【適応車種:タント エグゼ(L450系)】HOT STUFF ヴァーレン W03 ガンメタリック 4.5Jx15ディレッツァ Z3 165/55R15、EX2202.EXE)
unsigned short int num[10]; /* 整数を格納する配列 */
char buf[256 + 1]; /* 文字列を格納するバッファ */
int i; /* カウンタ変数 */
for (i = 0; i < 10; i++) {
 printf("Input number : ");
 (void)gets(buf); /* 文字列を受け取る */
 /* 受け取った文字列を整数に変換して配列に代入 */
 num[i] = atoi(buf);
}
この処理を実行形式としたソースは 、"ex2202.c"というファイル名でサンプルに収録しています。

配列名は先頭アドレスを示す

文字列を受け取るgets関数は 【割引クーポン配布中】ST/エスティー 車高調 タイプX(減衰力固定・マウント無し仕様) A4/B5 Avant、FF 車体番号/~8D*X 199999、以下のような形で使われています。
(void)gets(buf);
gets関数の引数はchar *型(char型のポインタ)ですが、ここではchar型配列の名前"buf"をそのまま使っています。配列の名前はその先頭のアドレスを保持しています。ポインタもまたアドレスを示すので、このような使い方ができるのです。

なお、ポインタとアドレスの関係などについては、回を追って詳しく解説します。ここでは、

CRIMSON(クリムソン) CLUB LINEA L612 (クラブリネア L612) 17インチ 8.5J PCD:100 穴数:4 inset:34 DISK TYPE:SUPER LOW カラー:シルバーポリッシュ [ホイール1本単位]/H


引数にポインタが指定されている場合
同じ型の配列名を使用できる
ことを知っておいてください。

【質問1】コラムをどれくらい読みましたか?

{yahoojp}jpprem01-zenjp40-wl-zd-69814