0

我目前有一个子程序的代码来返回一个指向数组的指针。该数组是一维蒙特卡罗积分的随机数列表。我现在正在尝试做一个多维等价物,它需要 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 类型(其中 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

我能想到的三种方法是:

  1. A*double到大小为 3xN 的一维数组(您可以假装它是三个数组)
  2. A**double到三个*doubles 的数组,每个指向 N 的数组
  3. Astruct包含三个*doubles,每个指向 N 的数组

如果您不喜欢假装方法 1,您可以再声明两个*doubles 并将它们分别设置为返回值 + N 和 + 2N 。也不要忘记你应该分别为每个方法做free()1、4 和 3秒。free()

于 2010-08-05T02:35:53.767 回答