c++ - 如何使用指针用随机数填充二维数组

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

当我执行这段代码时,我没有得到一个完全随机数的矩阵,而是得到了许多重复的数字。知道我如何使用 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;
}

最佳答案

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

#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 

关于c++ - 如何使用指针用随机数填充二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15608004/

相关文章:

c++ - 将结构放入匿名命名空间有什么作用?

c++ - 无法从 char*[] 转换为 char**

python - 根据文件中的条件随机抽取文件样本

Java 骰子游戏生成新数字时遇到问题

java - 随机产生球

C++ 链接自定义 .so 库,然后使用 JNI

c++ - 尝试为 rtsp 流填充 yuv 图像时出现段错误

c++ - 从 C/C++ 获取指向 msgpack 数组中元素的指针和长度

c - C 字符串中的 %d 个指针到整数的转换?

c++ - 如何找到传递给函数的矩阵的大小?