-3

私はこれに対する解決策を見つけようとしてインターネット中を見渡し、コードのあらゆる種類のさまざまな配置を試みましたが、機能するものや正しい結果を生成できるものを見つけることができませんでした. 基本的に、既に作成された配列をパラメーターとして受け取り、前の配列と他のパラメーターの値に基づいて新しい配列を作成し、元の配列を置き換える関数が必要です新しく作成された配列を持つパラメーター。コードは次のようになります。

void function(double *array, double other_parameter)
 {
  /* do some calculations involving the array and the parameter */
  double new_array[/* some # */] = /* some expression */;
  *array = *new_array;
 }

main()
 {
  double *x[/* some # */];
  x[0]=/* some # */;x[1]=/* some # */;x[2]=/* some # */,...
  double par = /* something */
  function(x,par);
  printf("x =\n%f\n%f\n",x[0],x[1],...)
 }

コメント部分はすべて、この配列で実行したい特定のタスクと、配列に指定するために具体的に選択した値を表していますが、これらは重要ではありません。私が理解しようとしているのは、配列、ポインター、およびパラメーターに使用した表記法にどのような変更を加える必要があるかということです。また、目的の結果を得るためにこれらの変更を行う必要がある場所。これが機能する唯一の方法である場合は、必要に応じて、元の配列のサイズを追加パラメーターとして関数に入力することができます。また、新しい配列のサイズが元の配列のサイズと常に同じであるとは限らないことも付け加えておきます (パラメーターによって異なります)。

誰かが私を助けてくれることに本当に感謝しています。私は何時間もコードをいじくり回してきましたが、これまでのところ何も機能していません。

4

1 に答える 1

1

Cで配列を割り当てた場合、それをスタックに戻すことはできません。(つまり、呼び出し元の関数に戻ります)

アレイを作成して送り返すには、次を使用する必要がありますmalloc()

double* my_ar = malloc(sizeof(double) * ar_size);
...
free(my_ar);

次に、その配列を展開する場合

my_ar = realloc(my_ar, sizeof(double) * new_size);

これにより、以前のアレイが解放され、同じサイズで同じ内容の新しいアレイが作成されるか、以前のアレイが所定の位置に拡張されます。

アレイを複製したい場合

#include <string.h>
...
double* new_ar = malloc(my_ar, sizeof(double) * new_ar_size);
memcpy(new_ar, my_ar, MIN(ar_size, new_ar_size) * sizeof(double));
于 2013-03-11T15:47:22.223 に答える