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

C言語でポインタ演算を使って配列の合計を求める方法

この記事では、C言語においてポインタ演算を使用して、配列の各要素の合計を求めるプログラムを解説します。

ポインタ演算の基本

ここで使う「*」は、指定されたメモリアドレスに格納されている値(間接参照)を表します。アドレス自体は変数の中に保持されます。つまり、「int *ptr;」という宣言は、「ptr はアドレスを格納する変数であり、そのアドレスに格納されている中身は整数型である」ことを意味します。

また、「*p」のように書かれたものはポインタ変数を示します。このポインタ変数と関数を組み合わせることで、配列の要素の合計を効率的に計算できます。

ポイントとなるのは、配列名は先頭要素へのポインタとして扱えるというC言語の性質です。「*(a + i)」は「a[i]」と完全に同じ意味になり、これがポインタ演算による配列アクセスの基本です。

サンプルコード

#include <stdio.h>

void s(int* a, int len) {
   int i, s_of_arr = 0;
   for (i = 0; i < len; i++)
      s_of_arr = s_of_arr + *(a + i);
   printf("sum of array is = %d", s_of_arr);
}

int main() {
   int arr[] = { 1, 2, 4, 6, 7, -5, -3 };
   s(arr, 7);
   return 0;
}

実行結果

sum of array is = 12

アルゴリズムの流れ

  1. 合計を求めたい値で配列を初期化します。
  2. 配列の先頭アドレス(ポインタ)と要素数を引数として、合計を計算する関数 s を呼び出します。
  3. 関数内では、ポインタ演算「*(a + i)」を使って各要素に順番にアクセスし、合計を累積していきます。
  4. 最後に合計値を出力して終了します。

コードの解説

関数 s の処理

関数 s は、int型へのポインタ a と配列の長さ len を受け取ります。ループカウンタ i を 0 から len - 1 まで回しながら、「*(a + i)」によって i 番目の要素の値を取得し、変数 s_of_arr に加算していきます。

main 関数の処理

main 関数では、7つの整数(正の数と負の数を含む)で配列 arr を初期化し、配列名 arr(先頭要素へのポインタ)と要素数 7 を渡して関数 s を呼び出しています。

この例では、1 + 2 + 4 + 6 + 7 + (-5) + (-3) = 12 となり、実行結果も 12 が出力されます。負の値が含まれていても正しく計算できることがわかります。

  1. 【JavaScript】配列内のネストされたオブジェクトの値を合計する方法

    この記事では、JavaScriptを使って、配列内にネストされた(入れ子構造の)オブジェクトの値を合計する方法を解説します。サンプルコードでは、JSONデータの複数階層に格納された数値(costNum)を順番に取り出し、その合計をブラウザ上に表示します。 コード例 <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=d

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

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