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

ポインタ(アドレス渡し)を使って加算と減算を同時に求めるC++プログラム


問題の概要

2つの数 a と b があると仮定しましょう。ここで、(a + b) と (a − b) の両方を計算できる関数を定義する必要があります。しかし、C++の関数では return 文で返せる値は最大1つまでという制約があります。

そこで、複数の結果を扱いたい場合には、関数の引数にポインタ型の出力パラメータを用意し、呼び出し側から変数のアドレスを渡す方法が有効です。本記事の問題では、a を a + b の値に、b を a − b の値に更新することを考えます。関数を呼び出す際には、この2つの変数のアドレスを渡す必要があります。

例えば、入力が a = 15、b = 18 だった場合、出力は「a + b = 33」「a − b = -3」になります。

解き方の手順

  • solve() という関数を定義します。この関数は a と b のアドレス(ポインタ)を受け取ります
  • temp に、渡されたアドレス先にある2つの変数の値の合計を代入します
  • b に、渡されたアドレス先にある2つの変数の値のを代入します
  • a に temp の値を代入します

実装例

以下のコードを見ると、処理の流れがより理解しやすくなります。

#include <iostream>
using namespace std;
int solve(int *a, int *b){
    int temp = *a + *b;
    *b = *a - *b;
    *a = temp;
}
int main(){
    int a = 15, b = 18;
    solve(&a, &b);
    cout << "a + b = " << a << " and a - b = " << b;
}

入力

15, 18

出力

a + b = 33 and a - b = -3

ポイント解説

この手法の鍵となるのはポインタです。solve() 関数内で *a や *b と記述することで、渡されたアドレスが指し示す元の変数そのものへアクセスできます。そのため、関数内で行った変更が main() 側の変数に直接反映される仕組みです。これは「参照渡し」と呼ばれるテクニックの一種で、C++では参照(&)を使う方法もありますが、明示的にアドレスを渡すポインタ方式はC言語との互換性が高く、実務でも広く活用されています。


  1. C++で楕円の面積を求めるプログラムの作成方法

    この記事では、C++を使って楕円(だえん)の面積を求める方法を解説します。楕円にはいくつかの重要な構成要素があり、それぞれの意味を理解しておくと計算の仕組みがより明確になります。楕円の主な構成要素要素説明中心楕円の中心点。2つの焦点を結ぶ線分の中点でもあります。長軸楕円における最も長い直径です。短軸楕円における最も短い直径です。弦楕円上の2点を結ぶ線分のことです。焦点楕円を定義する2つの特別な点。図中に示された2点が該当します。通径焦点を通り、長軸に対して垂直な直線(線分)のことです。楕円の面積の公式楕円の面積は、長半径 a と短半径 b を使って次の式で表されます。面積 = π × a ×

  2. C++で再帰を使って最大公約数(GCD)を求めるプログラム

    2つの数の最大公約数(GCD:Greatest Common Divisor)とは、その両方の数を割り切ることができる最大の整数のことです。例として、63と42という2つの数を考えてみましょう。63 = 7 × 3 × 3 42 = 7 × 3 × 2 したがって、63と42のGCDは 21このように、共通する約数は「7」と「3」であり、その積である21が最大公約数となります。ここでは、再帰(リカージョン)を使って2つの数のGCDを求めるC++プログラムを2つの方法で紹介します。方法1:減算による再帰1つ目の方法は、大きい方の数から小さい方の数を引く操作を再帰的に繰り返すアプローチです。これは