C++ 动态数组创建

如何解决C++ 动态数组创建

我被提示如下问题

  1. 编写一个打印动态数组的程序。
  2. 该程序创建了一个包含 3 个元素的 int 1D 动态数组,并且 一个包含 3 个 ROWS 和 3 个 COLS 的浮点二维动态数组。
  3. 随机值初始化两个数组。
  4. 两个数组将在两个单独的函数中分别打印
  5. void print_2d_array(float**);
  6. void print_1d_array(int*);"

我创建了一个不会产生任何输出代码。我猜问题在于数组的初始化,但我无法弄清楚。如何让它显示随机生成的数字?

#include <iostream>
#include <iomanip>

using namespace std;

void print_2d_array(float**);
void print_1d_array(int*);

int main() {
    srand(time(NULL));

    int* arr[3];
    float** arr_two[3][3];

    for (int i = 0; i < 3; i++)
        *arr[i] = rand() % 100;
    
    for (int j = 0; j < 3; j++)
        for (int k = 0; k < 3; k++)
            **arr_two[j][k] = rand() % 100;

    print_1d_array(*arr);
    print_2d_array(**arr_two);
}

void print_2d_array(float** arr_two) {
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++)
            cout << arr_two[i][j];
    }
    cout << endl;
}

void print_1d_array(int* arr) {
    for (int i = 0; i < 3; i++)
        cout << arr[i];
}

解决方法

您永远不会为一维 int 数组分配内存,也不会为 float 二维数组分配内存。您的声明也是错误的,例如 float** arr_two[3][3] 是一个大小为 3 的数组的大小为 3 的指向 float 的指针的数组,显然不是您想要的。

您的代码应该更像这样:

int *arr = new int[3]; // pointer to int will hold 3 ints

float **arr_two = new float *[3]; // array of 3 pointers to float

for (int i = 0; i < 3; i++)
{
    arr_two[i] = new float[3]; // each pointer will hold 3 floats
}

for (int i = 0; i < 3; i++)
    arr[i] = rand() % 100; // indexing is the same as if it was an array[size]

for (int j = 0; j < 3; j++) // indexing is the same as if it was an array[size][size]
    for (int k = 0; k < 3; k++)
        arr_two[j][k] = rand() % 100;

print_1d_array(arr); // you pass the name of the pointers,no dereference needed
print_2d_array(arr_two);

您还应该在打印函数中打印一些空格和换行符,否则这将看起来像一个非常大的单个值。

另外,不要忘记在以后不再需要数据时释放内存:

delete[] arr;

for (int i = 0; i < 3; i++)
{
    delete[] arr_two[i];
}

delete[] arr_two;

我还应该提到,在现代 C++ 中,我们很少看到原始指针的使用(除了可能在 SO 问题中)。替代方案是:

另请注意,您的随机值都是 int,因此您不会在 float 数组中看到 float 值。如果你想随机生成分数值,你需要一个新的方法,看看这里:Random float number generation

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?