C++サンプル集

【第1部】C言語(K&R検証)編

0007.累乗(るいじょう)関数をテストする

ソース紹介

CPPファイルに記述
#include <iostream>
#include <cstdio>
using namespace std;

/*
base を n乗 する。ただし n >= 0
*/
int power(int base, int n) {
    int p;
    for (p = 1; n > 0; --n) {
        p = p * base;
    }
    return p;
}

/*
累乗(るいじょう)関数をテストする
*/
int main()
{
    for (int i = 0; i < 10; ++i) {
        cout << i << '\t';
        cout << power(2, i) << '\t';
        cout << power(-3, i) << endl;
    }
    return 0;
}
出力
0       1       1
1       2       -3
2       4       9
3       8       -27
4       16      81
5       32      -243
6       64      729
7       128     -2187
8       256     6561
9       512     -19683

サンプル説明

 K&Rにはべき乗を計算する関数が複数紹介されてますが、今回はそのforループを使った関数を元にしています。
 C/C++言語の関数呼び出しは値呼び出しです。
 つまり呼び出し元が呼び出す関数に引数を渡すにあたって、呼び出される側は引数のコピーを作り出して、操作(処理)をします。そのため呼び出し側の変数は、呼び出した後もその内容が変わりません。
 今回のサンプルでは、呼ばれた側power()関数が、引数そのものint nを変更しています。しかし、コピーが渡されているので、呼び出し側main()関数int iが影響を受けることはありません。
    for (p = 1; n > 0; --n) {
        p = p * base;
    }
 で確認できます。
 このことを使って再帰処理を行うこともできます。
 しかし、明示的にポインタもしくは参照を渡すと、呼び出された側が、その内容を変更することが可能となります。

K&Rでの記述

 元になったのは第1章:やさしい入門に記述されています。引数-値による呼び出しの説明のところです。