2016-05-09 16 views
1

私は現在のPythonとの長い呪文の後に戻ってCに来ています。私は、C言語で複数の変数に関する情報を返す方法があるかどうか疑問に思っていました。私が考えることができる最良の方法は、変数を含む構造体を返すことでした。これが最善の方法ですか?Cの関数から複数の変数を返す方法はありますか?

+3

うん、右。それ以外の場合は、ポインタを渡します。 –

+0

あなたは –

+0

Pythonのデータ構造(すなわち、リスト)はC++データ構造(キュー、スタック、ベクトル)に1対1で対応していませんvectors' '使用することができます。あなたは何をしようとしているのか、より具体的にする必要があります。 –

答えて

4

Cは、あなたがこれを行うことができるようになるタプルまたは類似の機能をサポートしていません。だから、答えは残念ながらいいえです。

あなたが言ったように、あなたが得ることができる最も近いものは、あなた自身のカスタムstructを定義することであり、返す値を格納するために使うことができます。

+1

@sjsam trueですが、cがC++のサブセットであるため、C++がそれをサポートしていない場合、cはどちらもなりません。 – weston

+1

@ weston:私は同意しますが、私はそれらを 'tags 'のためにここで別の言語とみなします:D – sjsam

2

複数の変数は、このような二つの変数として、いくつかの明白な方法で互いに関連している(x, y)エトセトラ、(firstName, lastName, address)接触定義座標を記述する、structを返す溶液が良い論理的な選択です。あなたはより良いアプローチは、結果のためにポインタを渡すか、「メインの答え」として一つの値を選択し、他の値のためのポインタを渡すことで、相互に関係のない複数の変数を返さなければならない状況で

。標準ライブラリから

strtol機能は、「ハイブリッド」アプローチの一例である:それ戻り解析された値、及びセット渡されたポイント・ツー・ポインタを介してエンド・ポインタ。

2

あなたは間接的にパラメータとしてポインタを使用して行うことができます。 myDivideは除算とモジュロの結果を間接的に返します。

#include <stdio.h> 
#include <stdlib.h> 

void myDivide(int x, int y, int* div, int* mod); 

int main(void) { 
    int x = 100; 
    int y = 42; 
    int div, mod; 

    myDivide(x, y, &div, &mod); 
    printf("%d/%d = %d\n", x, y, div); 
    printf("%d %% %d = %d\n", x, y, mod); 

    return (0); 
} 

void myDivide(int x, int y, int* div, int* mod) { 
    *div = x/y; 
    *mod = x%y; 
} 
関連する問題