创建整数的 2D 数组,该数组将使用两个函数用随机数填充矩阵.我做错了什么?

Create 2D array of integers that will fill in the matrix with random numbers using two functions. What have I done wrong?

本文关键字:数组 填充 函数 随机数 什么 错了 两个 2D 整数 创建      更新时间:2023-10-16

这是代码。我需要有固定的行和列,当调用矩阵函数时,这些行和列会用随机数填充。需要有 2 个函数,一个用于显示,一个用于随机化。

#include "stdafx.h"
#include <iostream>
#include <cstdlib>
#include <time.h>
using namespace std;
const int ROWS = 10;
const int COLS = 8;
int matrix[ROWS][COLS];
void RandMatrix(int **arr, int row) {
for (int i = 0; i < row; i++)
for (int j = 0; j < COLS; j++)
*((*arr + i) + j) = rand() % 10;
}
void DisplayMatrix(int **arr, int row) {
for (int i = 0; i < ROWS; ++i) {
for (int j = 0; j < COLS; ++j)
cout << matrix[i][j];
cout << endl;
}
}
int main()
{
srand(time(NULL));
int matrix[ROWS][COLS];
for (int i = 0; i < ROWS; ++i) {
for (int j = 0; j < COLS; ++j) {
matrix[i][j] = -1;
}
}
int *ptr[ROWS];
int **arr = &ptr[0];
int row = 10;
for (int i = 0; i < ROWS; i++) {
ptr[i] = &matrix[i][0];
}
RandMatrix(arr, row);
DisplayMatrix(arr, row);
}

主要问题

指针算术在行中错误

*((*arr + i) + j) = rand() % 10;

它需要

*(*(arr + i) + j) = rand() % 10;

使用会更容易

arr[i][j] = rand() % 10;

小问题

  1. 您正在arr作为参数传递给DisplayMatrix但您没有使用它。相反,您使用的是matrix.幸运的是巧合,它工作正常。最好不要在函数中使用arr

  2. 您正在将row作为参数传递给DisplayMatrix但您在for循环中使用ROWS。再一次,它之所以有效,是因为幸运的巧合。

你把arr传递给DisplayMatrix- 但你实际上并没有在那里使用它。相反,该函数打印名为matrix的全局变量中的值。但是这些值从未被启动 -RandMatrix填充一个名为matrix的不同变量,即main的本地变量。

您正在使用arr作为参数调用DisplayMatrix函数,但您根本没有在其中使用arr。相反,您使用的是matrix.

DisplayMatrix函数中,更改以下行:

cout << matrix[i][j];

cout << *((*arr + i) + j);

它将按预期工作。