1

重複の可能性:
関数から複数の値を返す

たとえば、3つのポインターの値を変更する関数が必要な場合は、関数パラメーターとしてダブルポインターを宣言する必要があります。ダブルポインタで多くの行を書くと、コードを理解するのが非常に難しくなります。では、たとえば3つの入力変数と2つの出力変数など、複数の値を返す方法はありますか?

int * function(int *p,int **q,int **r)
{
  ...
  return p;
}

int main(){
  int *p,*q,*r;

  ...

  p=function(p,&q,&r);

  ...

  return 0;
}
4

4 に答える 4

6

変更するすべての変数を構造体に入れて、その構造体を関数から返すことができます。
構造体は任意の数の要素を保持できるためこの方法で関数から任意の数の要素を返すことができます。

もちろん、実際の環境では、すべての実用的な値に制限があります。

于 2012-06-17T05:33:28.703 に答える
1

struct変更する要素が同じタイプの場合は、forthatまたは配列を使用できます。

struct a {
    int *p;
    int *p2;
    int *p3;
    double *p4;
    ...
} ;

int * function(struct a*);

int main()
{
     struct a a;
     function(&a);
     return 0;
}
于 2012-06-17T05:38:44.517 に答える
0

すでに述べたように、構造を使用して複数の値を集約できます。@obounaimの例は、そのような構造体へのポインターを受け取る関数を示していますが、より単純で読みやすい値で構造体を返すこともできます。

typedef struct 
{
    int x ;
    int y ;
    int z ;

} coord3d ;

coord3d getPosition(void);

int main()
{
     coord3d pos = getPosition();
     return 0;
}

大きな構造の場合、これは非常にコストがかかる可能性があり、構造にポインターが含まれている場合、構造のすべてのコピーが同じデータを指すため、注意が必要ですが、多くの場合、これはより単純で直感的です。たとえば、構造にデカルト座標や複素数などの緊密にまとまりのあるデータが含まれている場合、この方法は理にかなっており、値による戻りのセマンティクスにほとんどオーバーヘッドがありません。

于 2012-06-17T08:56:14.137 に答える
0

関数にポインターを渡し、関数内のポインターを変更することもできますが、そのための構造体を使用する方が適切です。

于 2012-06-17T06:20:56.147 に答える