c++ - 更新 : C++ Pointer Snippet

标签 c++ pointers

再次问候,再次感谢所有为第一个问题提供答案的人。更新以下代码以包含每个分配的两个函数。

要查看原始问题,请单击 here .

漂亮确信这满足了作业的要求,但我再次非常感谢任何帮助。我是否适本地修改了删除语句?再次感谢。

#include<iostream>
#include<string>

int** createArray(int, int);
void deleteArray(int*[], int);

using namespace std;

int main()
{
    int nRows;
    int nColumns;

    cout<<"Number of rows: ";
    cin>>nRows;

    cout<<"Number of columns: ";
    cin>>nColumns;

    int** ppInt = createArray(nRows, nColumns);

    deleteArray(ppInt, nRows);
}

int** createArray(int nRows, int nColumns)
{
    int** ppInt = new int*[nRows];

    for (int nCount = 0; nCount < nRows; nCount++)
    {
        ppInt[nCount] = new int[nColumns];
    }

    return ppInt;
}

void deleteArray(int** nPointer, int nRows)
{
    for (int nCount = 0; nCount < nRows; nCount++)
    {
        delete[] nPointer[nCount];
    }

    delete[] nPointer;
}

附言这是作业文档本身,以防有帮助:

(1) 设计并实现一个为二维整数数组分配内存的函数:该函数需要两个整数作为参数,一个是行数,一个是列数。您需要在此函数中使用“new”运算符。请记住,我们需要先创建一个指针数组。然后,对于该数组中的每个指针,我们需要创建一个整数数组。该函数应该返回一个指向二维整数数组的指针。

(2) 设计并实现一个函数来为这个二维数组释放内存:该函数应该有两个参数(一个指向二维整数数组的指针,另一个是数字数组中的行数)。在该函数中,您应该使用“删除”运算符为该二维数组取消分配内存。您应该先删除每一行(整数数组),然后再删除指针数组。

最佳答案

代码看起来不错。

但是,对于我们人类,您可能需要解决一些问题:

  1. 您的函数签名(声明)缺少参数名称。更适合:

    int** createArray(int rows, int columns);
    void deleteArray(int** array, int rows);
    
  2. 您的函数名称对于它们真正创建/删除的内容并没有太过描述。例如,create2DArray 将是一个更明智的选择。

  3. 你的变量的 n 前缀伤害了我的眼睛。 numRowsrowCount 更具可读性。
  4. 同样,ppInt 也很疯狂。尝试 array(也用于 nPointer,以保持一致性)。 (遗憾的是,您不能编写 2dArray。)
  5. 使用 i 作为循环计数器比 nCount 或类似的更常见(尤其是对于数组索引)。我建议您改为使用它。

一些超越 self 的东西,供您个人练习:

  1. 创建一个类,将 rowscols 作为其构造函数的参数。确保自动释放数组。
  2. 使用std::vector 并为您的类创建一个resize 成员函数。 请注意,这与最初的问题有所不同,后者要求指点。
  3. 创建一个copy 函数和一个clone 函数以将数据复制到另一个二维数组(可能大小不同!)或克隆现有数组。

关于c++ - 更新 : C++ Pointer Snippet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/550223/

相关文章:

c++ - 无法将 dbus 与 C++ 链接

c++ - 为什么我需要写 "std::string"而不是 "std::getline()"?

c++ - 为什么for_each通过move返回函数

c++ - 通过引用修改数组后,为什么它保持不变?

c - C语言中如何获取指向指针的指针?

c++ - 如何定义指向函数指针的指针以及如何在 C++ 中使用它?

c++ - 将 strcmp C/C++ 用于 Arduino 时的数字通配符

c++ - matlab deploytool 在尝试构建 C++ 共享库时给出错误

c - C函数构建中的星号位置是什么意思?

c++ - : Handle, 指针和引用有什么区别