0

現在、配列へのポインタを返すサブルーチンのコードがあります。この配列は、1次元モンテカルロ積分の乱数のリストです。私は今、乱数の3つの配列を必要とする多次元の同等物を実行しようとしています。それぞれに個別のサブルーチンを使用する代わりに、3 x N+1の配列を返すサブルーチンを作成しようとしています。誰かがこれのコーディングを手伝ってくれませんか。仲間は私がダブルポインターを必要とするだろうと言ったが、ほとんどのウェブソースはこれまで役に立たなかった。これが私の単一の配列コードです:

double* rdm_Y(void)
{
   double* Random_number_list_Y = calloc(N + 1, sizeof(double));
   int i;
   sleep(1);
   srand(time(NULL));
   for (i = 1; i <= N; i++) {
      Random_number_list_Y[i] = (float) rand() / (float) RAND_MAX;
   }
   return Random_number_list_Y;
}

どうもありがとう!ジャックメドレー

4

3 に答える 3

1

試す:

struct res{
 double *arr1, *arr2, *arr3;
};
main(){
 struct res r;
 r.arr1 = rdm_Y();
 r.arr2 = rdm_Y();
 r.arr3 = rdm_Y();
 // in r you have 3 pointers to 3 separate arrays
}

またはこのようなもの

于 2010-08-01T23:43:45.743 に答える
1

タイプTの2D配列(Tは、など)を動的に割り当てるための一般的なパターンは次のとおりintですdouble

#include <stdlib.h>

T **alloc(size_t rows, size_t columns)  
{
  T **arr = malloc(sizeof *arr, rows); // type of *arr is T *
  if (arr)
  {
    size_t i;
    for (i = 0; i < rows; i++)
    {    
      arr[i] = malloc(sizeof *arr[i], columns); // type of *arr[i] is T
      if (arr[i])
      {
        size_t j;
        for (j = 0; j < columns; j++)
        {
          arr[i][j] = initial_value_for_this_element;
        }
      }
    }
  }
  return arr;
}
于 2010-08-01T23:58:07.927 に答える
1

私が考えることができる3つの方法は次のとおりです。

  1. サイズ3xNの*double1D配列(3つの配列のふりをすることができます)
  2. A**doubleから3つ*doubleの配列、それぞれがNの配列を指している
  3. それぞれがNの配列を指す3つのsをstruct含む*double

メソッド1のふりをしたくない場合は、さらに2つ*doubleのsを宣言して、それぞれ戻り値+Nと+2Nに設定できます。また、各メソッドに対してそれぞれfree()1、4、および3秒を実行する必要があることを忘れないでください。free()

于 2010-08-05T02:35:53.767 に答える