C   配列

ホーム   C/C++チュートリアル


この章では、C の 「配列」を説明します。


array

array.c


#include <stdio.h>

#define ELEM 4

int main()
{
    /* 数値配列 */
    int number[] = {100, 200, 300, 400};
    printf("------------------------------\n");
    for (int i=0; i < ELEM; i++)
    {
        printf("%d\t", number[i]);
    }
    printf("\n");
    printf("------------------------------\n");
    
    /* 文字列配列 */
    char  word[ELEM][100];
    for (int i=0; i < ELEM; i++)
    {
        printf("Enter word: ");
        scanf("%s", word[i]);
    }
    printf("------------------------------\n");
    for (int i=0; i < ELEM; i++)
    {
        printf("%s\t", word[i]);
    }
    printf("\n");
    printf("------------------------------\n");
    
    return 0;
}
    

実行結果


------------------------------
100	200	300	400	
------------------------------
Enter word: Jane
Enter word: Mary
Enter word: Bob
Enter word: Tom
------------------------------
Jane	Mary	Bob	Tom	
------------------------------
    

コード説明

  1. int number[ ] = {100, 200, 300, 400};
    配列は「型名 配列名[ ]」のように配列名の後ろに[ ]を付けて定義します。 通常[ ]の中に要素の数を書きますが、定義と同時に初期化する場合は、 要素の数の記述を省略できます。
    配列の初期化は、{ }の間にカンマ , で区切って値を記述します。
  2. printf("%d\t", number[i]);
    配列の個々の要素にアクセスするには、[ ]の間にその要素の番号を書きます。 配列の要素番号は 0 から始まっています。
  3. char word[ELEM][100];
    配列の定義だけをする場合は、[ ]の間に要素数を記述しなければなりません。
    [ ][ ] と [ ] が2つあるものは「2次元配列」と呼ばれ、 [4][100] の場合は、100の要素がある配列を、4つ持つ配列という意味になります。 C の文字列は char 型の配列です。
  4. scanf("%s", word[i]);
    scanfは、キーボードから読み込んだ値を、変換指定子の型に変換し、カンマ , の後ろの変数に代入します。ちょうど printf の反対の処理をするような関数です。
    配列の個別の要素を指定するには、配列名[要素番号]と記述します。 要素番号は 0 から始まります。

sizeof

sizeof.c


#include <stdio.h>

int main()
{
    int  nums [] = {100, 200, 300, 400};
    char chars[] = {'H', 'e', 'l', 'l', 'o'};
    char count;
    
    count = sizeof nums / sizeof nums[0];
    
    printf("count is %d.\n", count);
    for (int i = 0; i < count; i++)
    {
        printf("%d\t", nums[i]);
    }
    printf("\n");
    
    count = sizeof chars / sizeof chars[0];
    printf("count is %d.\n", count);
    
    for (int i = 0; i < count; i++)
    {
        printf("%c\t", chars[i]);
    }
    printf("\n");
    
    for (int i = 0; i < count; i++)
    {
        printf("%c", chars[i]);
    }
    printf("\n");
    
    return 0;
}
    

実行結果


count is 4.
100	200	300	400	
count is 5.
H	e	l	l	o	
Hello
    

コード説明


二次元配列

2darray.c


#include <stdio.h>

int main()
{
    int array[][4] = {{1, 2, 3}, {10, 20, 30}, {100, 200, 300}};
    
    int row = sizeof array / sizeof array[0];
    int col = sizeof array[0] / sizeof array[0][0];
    
    printf("row:%d col:%d\n", row, col);
    
    for (int i = 0; i < row; i++)
    {
        for (int j = 0; j < col; j++)
        {
            printf("%3d\t", array[i][j]);
        }
        puts("");
    }
    return 0;
}
    

実行結果


row:3 col:4
  1	  2	  3	  0	
 10	 20	 30	  0	
100	200	300	  0
    

コード説明

  1. int array[][4] = {{1, 2}, {10, 20}, {100, 200}};
    2次元配列は [][] と [] を2つ記述して作ります。1つ目の [ ] の中の要素数は 省略できますが、2つ目の [ ] の中の要素数は省略できません。
    配列に代入する値は、{ }, { }, { } の配列を { } で囲む形で記述します。
  2. int col = sizeof array[0] / sizeof array[0][0];
    各要素の配列の要素数を取得するには、このように記述します。
  3. for (int j = 0; j < col; j++)
    for 文の中に for 文を記述することができます。2番目の for 文のイテレーターには j が良く使われます。この for を二重に使う方法は 二次元配列に対しての定番の処理方法です。
  4. printf("%3d\t", array[i][j]);
    二次元配列のおのおのデータにアクセスするには、このように記述します。
  5. puts("");
    puts は、引数の文字列をターミナルに出力して改行します。printf のように数値を 含めることはできませんが、自動的に改行します。
  6. 
    100	200	300	  0
        
    2つ目の [ ] の要素数の記述が、実際の要素数よりも大きかった場合は、 自動的に 0 で初期化された要素が作られます。
    逆に要素数の記述が、実際の要素数よりも小さかった場合は、その要素は作られません。
    なお、int を特定の値で、初期化していない場合は、自動的に 0 が代入されますが、言語的に 0 で初期化されることが 保障されているわけではありません。



27765 visits
Posted: Dec. 23, 2019
Update: Dec. 25, 2019

ホーム   C/C++チュートリアル   目次