再次问候,再次感谢所有为第一个问题提供答案的人。更新以下代码以包含每个分配的两个函数。
要查看原始问题,请单击 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) 设计并实现一个函数来为这个二维数组释放内存:该函数应该有两个参数(一个指向二维整数数组的指针,另一个是数字数组中的行数)。在该函数中,您应该使用“删除”运算符为该二维数组取消分配内存。您应该先删除每一行(整数数组),然后再删除指针数组。
最佳答案
代码看起来不错。
但是,对于我们人类,您可能需要解决一些问题:
您的函数签名(声明)缺少参数名称。更适合:
int** createArray(int rows, int columns); void deleteArray(int** array, int rows);
您的函数名称对于它们真正创建/删除的内容并没有太过描述。例如,
create2DArray
将是一个更明智的选择。- 你的变量的
n
前缀伤害了我的眼睛。numRows
或rowCount
更具可读性。 - 同样,
ppInt
也很疯狂。尝试array
(也用于nPointer
,以保持一致性)。 (遗憾的是,您不能编写2dArray
。) - 使用
i
作为循环计数器比nCount
或类似的更常见(尤其是对于数组索引)。我建议您改为使用它。
一些超越 self 的东西,供您个人练习:
- 创建一个类,将
rows
和cols
作为其构造函数的参数。确保自动释放数组。 - 使用
std::vector
并为您的类创建一个resize
成员函数。 请注意,这与最初的问题有所不同,后者要求指点。 - 创建一个
copy
函数和一个clone
函数以将数据复制到另一个二维数组(可能大小不同!)或克隆现有数组。
关于c++ - 更新 : C++ Pointer Snippet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/550223/