【问题标题】:How to populate 2d array with random numbers using pointers如何使用指针用随机数填充二维数组
【发布时间】:2013-03-25 05:05:28
【问题描述】:

当我执行这段代码时,我没有得到一个完全随机数的矩阵,而是得到了许多重复的数字。知道如何使用rainGen 生成真正随机的二维矩阵吗?非常感谢您提供的任何帮助!

#include <iostream>
#include <cstdlib>
using namespace std;

const int MATRIX_ROW = 5;
const int MATRIX_COL = 5;

int** rainGen(int **theMatrix_ptr_ptr, int rows);

int main()
{
    int matrix[MATRIX_ROW][MATRIX_COL];
    int *matrix_ptr[MATRIX_ROW];
int **matrix_ptr_ptr = &matrix_ptr[0];
int rows = 3;

for (int count = 0; count < MATRIX_ROW; count++)
    matrix_ptr[count] = &matrix[count][0];

rainGen(matrix_ptr_ptr, rows);

return 0;
}

int** rainGen(int **theMatrix_ptr_ptr, int rows)
{
    srand(1023);

    for (int i = 0; i < rows; i++)
        for (int j = 0; j < MATRIX_COL; j++)
            *((*theMatrix_ptr_ptr + i) + j) = rand() % 100;

return theMatrix_ptr_ptr;
}

【问题讨论】:

  • 如果你显然在使用 C++,最好使用&lt;random&gt; 中提供的新函数,例如default_random_engineuniform_int_distribution 等。

标签: c++ pointers random multidimensional-array pointer-to-array


【解决方案1】:

我添加了一些调试代码。 int matrix[MATRIX_ROW][MATRIX_COL]; 语句为matrix 分配内存,但它不初始化元素值。这些值将是先前内存使用留下的任何位模式。我将matrix 元素值初始化为意外值-1。最后,我打印了matrix

#include <iostream>
#include <cstdlib>
using namespace std;

const int MATRIX_ROW = 5;
const int MATRIX_COL = 5;

int** rainGen(int **theMatrix_ptr_ptr, int rows);

int main()
{
     int matrix[MATRIX_ROW][MATRIX_COL];
     // initialize matrix elements to -1.
     for (int i = 0; i < MATRIX_ROW; ++i)
          for (int j = 0; j < MATRIX_COL; ++j)
               matrix[i][j] = -1;
     int *matrix_ptr[MATRIX_ROW];
     int **matrix_ptr_ptr = &matrix_ptr[0];
     int rows = 3; // error
     for (int i = 0; i < MATRIX_ROW; i++)
          matrix_ptr[i] = &matrix[i][0];
     rainGen(matrix_ptr_ptr, rows);
     // print matrix elements.
     for (int i = 0; i < MATRIX_ROW; ++i) {
          for (int j = 0; j < MATRIX_COL; ++j)
               cout << " [" << i << "," << j << "] " << matrix[i][j];
          cout << endl;
     }
     return 0;
}

int** rainGen(int **theMatrix_ptr_ptr, int rows)
{
     srand(1023);
     for (int i = 0; i < rows; i++)
          for (int j = 0; j < MATRIX_COL; j++)
               *((*theMatrix_ptr_ptr + i) + j) = rand() % 100; //error
     return theMatrix_ptr_ptr;
}

输出:

[0,0] 8 [0,1] 53 [0,2] 30 [0,3] 51 [0,4] 40 
[1,0] 88 [1,1] 60 [1,2] -1 [1,3] -1 [1,4] -1 
[2,0] -1 [2,1] -1 [2,2] -1 [2,3] -1 [2,4] -1 
[3,0] -1 [3,1] -1 [3,2] -1 [3,3] -1 [3,4] -1 
[4,0] -1 [4,1] -1 [4,2] -1 [4,3] -1 [4,4] -1 

您可以从值为-1matrix 元素中看到,您并没有给matrix 的所有元素一个随机值。

作为一个有用的提示,我用// error 评论标记了两个特别感兴趣的语句。

解决问题后,输出应如下所示:

[0,0] 8 [0,1] 14 [0,2] 19 [0,3] 36 [0,4] 99 
[1,0] 53 [1,1] 45 [1,2] 20 [1,3] 64 [1,4] 3 
[2,0] 30 [2,1] 51 [2,2] 40 [2,3] 88 [2,4] 60 
[3,0] 22 [3,1] 36 [3,2] 42 [3,3] 1 [3,4] 49 
[4,0] 96 [4,1] 24 [4,2] 48 [4,3] 92 [4,4] 46 

【讨论】:

    【解决方案2】:

    我认为你应该把你的 srand() 放在函数之外

    int** rainGen(int **theMatrix_ptr_ptr, int rows)
    

    你应该把它放到 main() 中。

    另一种方法:

    您可以将 srand(1234) 更改为 srand(time())

    但你必须

    #include <time.h>
    

    第一

    【讨论】:

      【解决方案3】:

      srand() 重新初始化随机生成器。 您可以使用当前时间作为 srand() 的参数。 这将解决您的问题

      【讨论】:

        【解决方案4】:

        根据我对您问题的理解。我为你提供了一些代码。可能这会对你有所帮助。

            #include <stdio.h>
            #include <stdlib.h>
            #include <time.h>
        
            --------->int <---------
            main (int argc, char *argv[])
            {
              /* Simple "srand()" seed: just use "time()" */
              unsigned int iseed = (unsigned int)time(NULL);
              srand (iseed);
        
              /* Now generate 5 pseudo-random numbers */
              int i;
              for (i=0; i<5; i++)
              {
                printf ("rand[%d]= %u\n",
                  i, rand ());
              }
              return 0;
            }
        
         /*
             * rand: Generates 5 numbers using standard "srand()/rand()" function
             *
             * SAMPLE OUTPUT:
             *   rand[0]= 824522256
             *   rand[1]= 1360907941
             *   rand[2]= 1513675795
             *   rand[3]= 1046462087
             *   rand[4]= 253823980
             */
        

        【讨论】:

          猜你喜欢
          • 2012-07-27
          • 1970-01-01
          • 2014-05-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-04-17
          • 2012-08-21
          相关资源
          最近更新 更多