[C++]スラスラわかるC++ 「C++の仕様で配列は必ずのポインタ渡しになる」を知るための実験プログラム 4_12 cpp *ptr &address

chapter4.h


// 配列の平均値を返す関数のプロトタイプ宣言
double getAverage(const int *a, int length);

getAverage.cpp

double getAverage(const int *a, int length) {
  double sum;		// 合計値
  double average;	// 平均値
  int i;		// 配列の要素番号(ループカウンタ)

  // 配列の合計値を求める
  sum = 0;
  for (i = 0; i < length; i++) {
    // ポインタが指し示している要素の値を読み出し集計する
    sum += *a;

    // ポインタを更新する(次の要素を指し示す)
    a++;
  }

  // 配列の平均値を求める
  average = (double)sum / length;

  // 配列の合計値を返す
  return average;
}

list4_12.cpp

#include <iostream>
using namespace std;
#include "chapter4.h"

int main() {
  const int DATA_NUM = 10;	// 配列の要素数

  // 10人の学生のテストの得点を格納した配列
  int point[DATA_NUM] = { 85, 72, 63, 45, 100, 98, 52, 88, 74, 65 };
  double average;		// 平均値

  // 平均点を求める
  average = getAverage(point, DATA_NUM);

  // 平均点を表示する
  cout << "平均点:" << average << endl;

  return 0;
}

cd_samples4_12_pointer_address.cmd  

 g++ list4_12.cpp getAverage.cpp -o list4_12.exe


C:\samples\chapter04\4_12>cd C:\samples\chapter04\4_12\

C:\samples\chapter04\4_12>g++ list4_12.cpp getAverage.cpp -o list4_12.exe

C:\samples\chapter04\4_12>list4_12.exe
平均点:74.2

C:\samples\chapter04\4_12>cmd /k
C:\samples\chapter04\4_12>

[C++]スラスラわかるC++ 引数のポインタ渡しを知るための実験プログラム 4_9 cpp *ptr &address

list4_9.cpp

#include <iostream>
using namespace std;

// 引数をポインタ渡しで受け取る関数
void sub(int *ptr) {
  // 引数に渡されたアドレスを表示する
  cout << "sub関数:引数ptrに渡されたアドレス = " << ptr << endl;

  // 引数に渡されたアドレスが指し示す変数の値を読み出して表示する
  cout << "sub関数:引数ptrが指し示す変数の値 = " << *ptr << endl;

  // 引数に渡されたアドレスが指し示す変数に値を書き込む
  *ptr = 456;
  cout << "sub関数:引数ptrが指し示す変数に書き込んだ値 = " << *ptr << endl;

  // 戻り値を返さずに関数を終了する
  return;
}

// main関数
int main() {
  // ローカル変数を宣言し、値を書き込む
  int val = 123;

  // ローカル変数のアドレスを表示する
  cout << "main関数:変数valのアドレス = " << &val << endl;

  // ローカル変数の値を表示する
  cout << "main関数:変数valの値 = " << val << endl;

  // 引数のポインタ渡しで、sub関数を呼び出す
  sub(&val);

  // ローカル変数の値を表示する
  cout << "main関数:変数valの値 = " << val << endl;

  return 0;
}

cd_samples4_9_pointer_address.cmd


C:\samples\chapter04>cd C:\samples\chapter04\

C:\samples\chapter04>g++ -o list4_9.exe list4_9.cpp

C:\samples\chapter04>list4_9.exe
main関数:変数valのアドレス = 0x61ff0c
main関数:変数valの値 = 123
sub関数:引数ptrに渡されたアドレス = 0x61ff0c
sub関数:引数ptrが指し示す変数の値 = 123
sub関数:引数ptrが指し示す変数に書き込んだ値 = 456
main関数:変数valの値 = 456

C:\samples\chapter04>cmd /k
C:\samples\chapter04>