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

C/C++の関数から複数の値を返す方法!ポインタと参照渡しを使った実装例を解説

C言語やC++では、関数から複数の値を直接返すことはできません。return文で返せるのは基本的に1つの値だけだからです。しかし、少し工夫をすることで、1つの関数から2つ以上の結果を受け取ることが可能です。

その代表的な手法が、「アドレス渡し(call by address)」または「参照渡し(call by reference)」と呼ばれる方法です。呼び出し元の関数側で結果を格納するための変数を用意しておき、呼び出される関数はポインタ型の引数を受け取ります。つまり、変数そのものではなく変数のアドレスを渡すことで、関数の中から呼び出し元の変数へ直接値を書き込むことができます。

ここでは、2つの整数の除算を行い、「商」と「余り」という2つの結果を1つの関数から同時に取得するプログラムを例に、具体的な実装方法を見ていきましょう。

サンプルコード

#include<stdio.h>
void div(int a, int b, int *quotient, int *remainder) {
    *quotient = a / b;
    *remainder = a % b;
}
main() {
    int a = 76, b = 10;
    int q, r;
    div(a, b, &q, &r);
    printf("Quotient is: %d\nRemainder is: %d\n", q, r);
}

実行結果

Quotient is: 7
Remainder is: 6

コードの解説

このプログラムでは、div関数が第3引数と第4引数としてint型へのポインタ(*quotient*remainder)を受け取っています。呼び出し元では、変数qrのアドレスを&q&rとして渡しています。

関数内部で*quotient*remainderに値を代入すると、それはポインタが指し示す先、すなわち呼び出し元のqrへの書き込みとなります。その結果、関数の戻り値がvoidであっても、商と余りの2つの情報を同時に取得できるのです。

補足:C++なら他の方法も使える

C++では、上記のポインタを使う方法に加えて、構造体やstd::pairを返り値にする方法、またC++17以降ではstd::tupleと構造化束縛を組み合わせることで、より直感的に複数の値を扱うこともできます。状況に応じて最適な手法を選択するとよいでしょう。

  1. JavaScriptの関数から値を返す方法【return文の基本と実例】

    JavaScriptの関数から値を返すには、return文を使用します。return文は、関数内で処理した結果を呼び出し元に渡すための基本的な仕組みであり、あらゆるプログラムで頻繁に使われる重要な構文です。 ここでは、文字列と数値を連結して返すシンプルな例を通じて、return文の使い方を確認していきましょう。まずは、次のコードを実行してみてください。 サンプルコード <html>    <head>       <script>          func

  2. JavaScript関数からオブジェクトを返す方法をわかりやすく解説

    JavaScriptの関数からオブジェクトを返すには、return文を使用します。オブジェクト内のプロパティやメソッドにアクセスする際は、thisキーワードを活用すると便利です。この記事では、実際のコード例を使いながら、JavaScript関数からオブジェクトを返す基本的な方法を解説します。基本的な考え方JavaScriptでは、オブジェクトの中にメソッド(関数)を定義できます。そのメソッド内でreturn文を使えば、処理結果や値を呼び出し元に返すことができます。また、thisキーワードを参照することで、同じオブジェクト内の他のプロパティにアクセス可能です。サンプルコード以下のコードでは、従業