Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

C言語で配列全体を関数の引数として渡す方法をわかりやすく解説

配列とは、関連性のある複数のデータを共通の名前でまとめて格納するためのデータ構造です。本記事では、C言語において配列全体を関数の引数として渡す方法を、基本概念からサンプルコードまで順を追って解説します。

配列の宣言

配列を宣言する際の基本的な構文は以下のとおりです。

datatype array_name [size];

たとえば、5個の整数を格納する配列は「int a[5];」のように宣言します。

配列の初期化

配列の初期化には、主に次の2つの方法があります。

  • コンパイル時初期化: コードを書く時点で値を決めておく方法

  • 実行時初期化: プログラムの実行時にユーザー入力などから値を設定する方法

宣言と同時に初期化することも可能です。その場合のコード例は以下のとおりです。

int a[5] = {100,200,300,400,500};

関数とは

関数とは、特定の明確に定義されたタスクを実行するためにまとめられた、自己完結型のコードブロックです。プログラムの再利用性や可読性を高めるために活用されます。

C言語で配列を関数の引数として渡す方法は、大きく分けて2種類あります。

  • 配列全体を引数として関数に渡す方法

  • 配列の個々の要素を引数として関数に渡す方法

ここでは、前者の「配列全体を引数として渡す方法」について詳しく見ていきましょう。

配列全体を関数の引数として渡す方法

配列全体を関数に渡す際のポイントは以下の2点です。

  • 呼び出し側: 関数呼び出し時に、添字([ ])を付けずに配列名だけを引数として指定します。

  • 受け取り側: 関数の仮引数(プロトタイプ宣言・ヘッダ部)で、同じ型の配列を受け取るための宣言を行います。

なお、C言語では配列名が先頭要素へのポインタとして扱われるため、実際には配列のコピーではなく先頭アドレスが渡されます。このため、関数側での変更が元の配列にも反映される点に注意が必要です。

サンプルコード1:配列全体を渡して表示する

ユーザーから5つの整数を入力してもらい、それを配列ごと関数に渡して表示するプログラムです。

#include<stdio.h>
main ( ){
   void display (int a[5]);
   int a[5], i;
   clrscr( );
   printf ("enter 5 elements");
   for (i=0; i<5; i++)
      scanf("%d", &a[i]);
   display (a); // 配列名を指定して配列 'a' 全体を渡す
   getch( );
}
void display (int a[5]) { // 配列全体を受け取る
   int i;
   printf ("elements of the array are");
   for (i=0; i<5; i++)
      printf("%d ", a[i]);
}

実行結果

上記のコードをコンパイルして実行すると、以下のような結果が出力されます。

Enter 5 elements
10 20 30 40 50
Elements of the array are
10 20 30 40 50

サンプルコード2:配列の要素を逆順に表示する

続いて、入力された配列の要素を逆順に出力するプログラムです。こちらも配列全体を関数「rev」に渡しています。

#include<stdio.h>
void main(){
   // 実行時に配列を宣言//
   int array[5],i;
   void rev(int array[5]);
   // 配列へ要素を読み込む//
   printf("Enter elements into the array: \n");
   // forループ//
   for(i=0;i<5;i++){
      // ユーザー入力を読み込む//
      printf("array[%d] :",i);
      scanf("%d",&array[i]);
   }
   // 配列の要素を逆順に表示//
   printf("The elements from the array displayed in the reverse order are : \n");
   rev(array); // 配列名を指定して配列全体を渡す
   getch();
}
void rev(int array[5]){ // 配列全体を受け取る
   int i;
   for(i=4;i>=0;i--){
      // 結果を表示//
      printf("array[%d] :",i);
      printf("%d\n",array[i]);
   }
}

実行結果

上記のプログラムをコンパイルして実行すると、以下のような結果が出力されます。

Enter elements into the array:
array[0] :23
array[1] :34
array[2] :12
array[3] :56
array[4] :12
The elements from the array displayed in the reverse order are:
array[4] :12
array[3] :56
array[2] :12
array[1] :34
array[0] :23

まとめ

C言語で配列全体を関数に渡す場合は、呼び出し側では配列名のみを指定し、受け取り側では仮引数として配列を宣言します。このとき実際に渡されるのは配列の先頭アドレスであるため、関数内で配列の内容を変更すると、呼び出し元の配列にも影響が及ぶ点を理解しておきましょう。この仕組みを活用すれば、大量のデータを効率よく関数間で扱うことができます。

  1. 【初心者向け】C言語のポインタを使って配列要素の合計を計算する方法

    ポインタとは?ポインタ(Pointer)とは、他の変数のアドレス(メモリ上の場所)を格納するための変数のことです。例えば、次のような変数宣言を見てみましょう。int qty = 179;この場合、変数 qty には値 179 が格納されています。ポインタは、この qty が配置されているメモリ上のアドレスを保持することができます。ポインタの宣言ポインタを宣言する構文は以下の通りです。int *p;ここで p はポインタ変数であり、他の int 型変数のアドレスを保持します。宣言時には、変数名の前に間接演算子 *(アスタリスク)を付けます。ポインタの初期化ポインタ変数を初期化するには、アドレス演

  2. C言語で配列の重複を削除し、ソート済みの一意な要素を出力する方法

    整数型の要素を持つ配列が与えられたとき、重複する値を取り除き、一意な(distinct)要素だけをソートして出力するのが本記事の目的です。例として、次のような整数値を格納した配列を考えてみましょう。4, 6, 5, 3, 4, 5, 2, 8, 7, 0この配列を単純にソートすると「0, 2, 3, 4, 4, 5, 5, 6, 7, 8」となりますが、この結果にはまだ重複値である 4 と 5 が含まれています。これらを削除し、最終的な出力結果は次のようになります。0, 2, 3, 4, 5, 6, 7, 8入力と出力の例Input: array[] = {4, 6, 5, 3, 4, 5,