创建整数的 2D 数组,该数组将使用两个函数用随机数填充矩阵.我做错了什么?
Create 2D array of integers that will fill in the matrix with random numbers using two functions. What have I done wrong?
这是代码。我需要有固定的行和列,当调用矩阵函数时,这些行和列会用随机数填充。需要有 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;
小问题
您正在
arr
作为参数传递给DisplayMatrix
但您没有使用它。相反,您使用的是matrix
.幸运的是巧合,它工作正常。最好不要在函数中使用arr
。您正在将
row
作为参数传递给DisplayMatrix
但您在for
循环中使用ROWS
。再一次,它之所以有效,是因为幸运的巧合。
你把arr
传递给DisplayMatrix
- 但你实际上并没有在那里使用它。相反,该函数打印名为matrix
的全局变量中的值。但是这些值从未被启动 -RandMatrix
填充一个名为matrix
的不同变量,即main
的本地变量。
您正在使用arr
作为参数调用DisplayMatrix
函数,但您根本没有在其中使用arr
。相反,您使用的是matrix
.
在DisplayMatrix
函数中,更改以下行:
cout << matrix[i][j];
自
cout << *((*arr + i) + j);
它将按预期工作。
相关文章:
- 在c++中用vector填充一个简单的动态数组
- 如何使用用户输入在C++中正确填充2D数组
- 如何找到大小'x'数组是否完全填充,在C++?
- 如何正确填充在堆上分配的二维数组?
- 如何将零填充的多维数组传递给 C++ 中的函数?
- C++ 填充数组时遇到问题
- 数组填充了不正确的值
- 使用初始化列表填充C++中的多维结构数组时出现问题
- 用数据填充未指定大小的数组
- C++填充多维标准::数组
- 如何在 c++ 上将一定大小的数组填充到另一个更大大小的数组中?
- 有没有办法使用数组填充向量?
- 如何使用 PPM 格式的 uchar* 数组填充 QPixmap
- 在C 中动态分配的数组填充
- 使用数组填充对称矩阵
- C++中的{0}数组填充赋值
- 如何在OpenCV中用OpenNi的deepPixel数组填充矩阵
- 按行、列或随机从数组填充矩阵时出现错误索引问题
- 如何加快非顺序数组填充
- 将数组填充到最大值(memcpy vs vector)