まとめ:ポインタによる配列の走査
CoddyのCジャーニー「Logic & Flow」セクションの一部 — レッスン 11/63。
チャレンジ
簡単ポインタ演算と配列とポインタの等価性を利用して、整数配列の全要素の合計を計算する関数を実装するCプログラムを作成してください。プログラムは以下の要件を満たす必要があります:
calculateSumという名前の関数を作成します。この関数は2つのパラメータを受け取ります:- 配列を表す整数へのポインタ (
int *arr) - 配列の要素数を表す整数 (
size)
- 配列を表す整数へのポインタ (
calculateSum関数内部の処理:- 変数
sumを 0 で初期化します - ポインタ変数
ptrを作成し、配列の先頭を指すように設定します - ループを使用して、ポインタ演算により配列を走査します
- 各反復で、
ptrが指す値をsumに加算します - ポインタをインクリメントして、次の要素に移動します
- 計算された合計を返します
- 変数
main関数内部の処理:- 配列のサイズを表す整数
nを読み取ります - サイズ
nの整数配列を宣言します - 入力から
n個の整数を読み取り、配列に格納します - 配列とそのサイズを引数として
calculateSum関数を呼び出します - 結果を "Sum: [value]" という形式で出力します
- 配列のサイズを表す整数
関数内での配列の走査には必ずポインタ演算を使用してください。arr[i] のような配列インデックス表記は使用しないでください。代わりに、ポインタのデリファレンスとインクリメント操作を使用して配列要素にアクセスしてください。
例えば、入力が以下の場合:
5
10 20 30 40 50出力は以下のようになります:
Sum: 150このチャレンジでは、関数が配列をポインタパラメータとして受け取る方法、ポインタ演算を使用して効率的に配列を走査する方法、および配列名が関数に渡される際に自動的にポインタに変換される仕組みについての理解をテストします。
自分で試してみよう
#include <stdio.h>
// TODO: ここに calculateSum 関数を記述してください
int main() {
int n;
scanf("%d", &n);
int arr[n];
// 配列の要素を読み込む
for(int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
// TODO: calculateSum 関数を呼び出し、結果を保存する
// TODO: "Sum: [値]" の形式で結果を出力する
return 0;
}