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言語で配列全体を関数に渡す場合は、呼び出し側では配列名のみを指定し、受け取り側では仮引数として配列を宣言します。このとき実際に渡されるのは配列の先頭アドレスであるため、関数内で配列の内容を変更すると、呼び出し元の配列にも影響が及ぶ点を理解しておきましょう。この仕組みを活用すれば、大量のデータを効率よく関数間で扱うことができます。
-
【初心者向け】C言語のポインタを使って配列要素の合計を計算する方法
ポインタとは?ポインタ(Pointer)とは、他の変数のアドレス(メモリ上の場所)を格納するための変数のことです。例えば、次のような変数宣言を見てみましょう。int qty = 179;この場合、変数 qty には値 179 が格納されています。ポインタは、この qty が配置されているメモリ上のアドレスを保持することができます。ポインタの宣言ポインタを宣言する構文は以下の通りです。int *p;ここで p はポインタ変数であり、他の int 型変数のアドレスを保持します。宣言時には、変数名の前に間接演算子 *(アスタリスク)を付けます。ポインタの初期化ポインタ変数を初期化するには、アドレス演
-
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,