代码之家  ›  专栏  ›  技术社区  ›  JMzance

在C语言中得到一个返回三个独立的随机数数组的子程序

  •  0
  • JMzance  · 技术社区  · 14 年前

    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;
    }
    

    非常感谢! 杰克混合泳

    3 回复  |  直到 14 年前
        1
  •  1
  •   John Bode    14 年前

    动态分配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;
    }
    
        2
  •  1
  •   Jerry Coffin    14 年前

    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
    }
    

        3
  •  1
  •   Vasiliy Sharapov    14 年前

    我能想到的三种方法是:

    1. A *double 一个3xN大小的1D数组(你可以假设它是三个数组)
    2. A **double 三人一组 *双倍 s、 每一个指向N的数组
    3. struct 包含三个 *双倍 s、 每一个指向N的数组

    *双倍 s并将其分别设置为返回值+N和+2N。也别忘了 free() 你应该有1,4,和3 免费()