blog

3分でCの配列を理解し、使いこなす!初心者の福音書

C言語は配列データ構造をサポートしており、同じ型の要素の固定サイズの連続したコレクションを格納します。配列は一連のデータを格納するために使用されますが、同じ型の一連の変数として考えられることがよくあり...

Sep 10, 2020 · 4 min. read
シェア

C言語は配列データ構造をサポートしており、同じ型の要素の固定サイズの連続したコレクションを格納します。配列は一連のデータを格納するために使用されますが、同じ型の一連の変数として考えられることもよくあります。

number0、number1、...、number99 のように個別の変数を宣言するのではなくnumber[0]、number[1]、...、number[99numbers[99]を使って個々の変数を表します。配列の特定の要素にはインデックスでアクセスできます。

すべての配列は連続したメモリー位置で構成されます。最も小さいアドレスが最初の要素に対応し、最も大きいアドレスが最後の要素に対応します。

配列の宣言

C言語で配列を宣言するには、以下のように要素の型と数を指定します:

int a[10];

配列の初期化

double balance[5] = {1000.0, 2.0, 3.4, 7.0, 50.0};

中括弧 { } で囲まれた値の数は、配列が宣言されたときに角括弧 [ ] で指定された要素の数より大きくすることはできません。

配列のサイズを省略した場合、配列のサイズは初期化時の要素数となります。したがって、もし

double balance[] = {1000.0, 2.0, 3.4, 7.0, 50.0};

配列要素へのアクセス

配列要素には、配列名+インデックスでアクセスできます。要素のインデックスは、配列名の後に角括弧で囲みます。例

double salary = balance[9].

C言語の配列

多次元配列。

1.次の文は、三次元の 5 . 10 . 4 整数配列: int threedim[5][10][4];

2.二次元配列

多次元配列の最も単純な形は2次元配列です。2次元配列は、要するに1次元配列のリストです。x行y列の2次元整数配列を次のように宣言します:

int array[2][3];/2 行 3 列

3.2次元配列の初期化

int a[3][4] = {
{0, 1, 2, 3} ,  /*  インデックス0の行を初期化する */ 
{4, 5, 6, 7} ,  /*  インデックス番号1の行を初期化する */
 {8, 9, 10, 11}  /*  インデックス番号2の行を初期化する */
};

4.2次元配列要素へのアクセス

# nclude< stdio.h >
Int main ()
{
 /* 5行2列の配列 */
 int a[5][2] = { {0,0},{1,2},{2,4},{3,6},{4,8}};
 int i,j;
 /* 配列の各要素の値を出力する */
 for ( i = 0; i < 5; i++ )
 {
 for ( j = 0; j < 2; j++ )
 {
 printf("a[%d][%d] = %d
", i,j, a[ i ][ j ] )
 }
 {
 return 0;
}

上記のコードをコンパイルして実行すると、次のような結果が得られます:

関数への配列の渡し方

関数のパラメータとして1次元配列を渡す場合、次の3つの方法で関数の形式パラメータを宣言する必要があります。同様に、多次元配列を形式パラメータとして渡すこともできます。

モード1:形式パラメータはポインタ。

void myFunction(int *param){
// some code
}

モード 2: 正式なパラメータは、定義されたサイズの配列です:

void myFunction(int param[10] ){
// some code
}

モード 3: 正式なパラメータはサイズが未定義の配列です:

void myFunction(int param[ ] ){
// some code
}

関数から配列を返す

C言語では、完全な配列を関数の引数として返すことはできません。しかし、インデックスを指定せずに配列の名前を指定することで、配列へのポインタを返すことができます。

関数から1次元配列を返したい場合は、以下のようにポインタを返す関数を宣言する必要があります:

int * myFunction(int param[ ] ){
// some code
}

配列へのポインタ

配列名は、配列の最初の要素への定数ポインタです。

balanceは、配列balanceの最初の要素のアドレスである&balance[0]へのポインタです。したがって、次のプログラムでは、balanceの最初の要素のアドレスにpを代入します:

double *p;
double balance[10];
p = balance;

配列名を定数ポインタとして使用することは合法であり、その逆も同様です。従って、*はbalance[4]データにアクセスする合法的な方法です。

記事のメリット

C/C++の学習を簡単かつ効率的にするために、最も基本的なものから、いばらの道を通るC/C++の学習に役立つ学習リソースを共有します!

初心者のためのC/C++学習教材

無料のC/C++学習教材を入手するには、ここをクリックしてください!

VSコンパイラ、グラフィックライブラリ

Cの関連電子書籍
C/C++プロジェクト
基本的なC/C++のビデオとノート
Read next

ケーススタディ:ブラウザのキャッシュ・メカニズムを深く理解する

ブラウザのキャッシュはフロントエンドのパフォーマンス最適化の重要な部分であり、フロントエンドの効率向上のための重要性は自明です。 ブラウザのキャッシュについても半ば理解し、今回は東風のH5ページキャッシュ最適化を利用して、強制キャッシュ、ネゴシエーションキャッシュなどのキャッシュ機構のローカルブラウザ側を整理し、現在のキャッシュ機構のポータルドメインコンポーネントと組み合わせて ...

Sep 10, 2020 · 8 min read