C++动态分配的二维数组作为函数参数
时间: 2024-12-03 10:12:31 浏览: 21
C与C++动态分配二维数组的实现方法
5星 · 资源好评率100%
在C++中,将动态分配的二维数组作为函数参数传递可能会稍微复杂一些,因为直接传递数组名会复制整个数组的地址,而不是它的内容。当函数结束后,原始数组的内存可能不会被自动释放。为了避免这种情况,可以采用以下几种策略:
1. **引用传递**:
使用引用(&)来传递数组,这样函数内部修改的是原数组:
```cpp
void process(int (&matrix)[rows][cols]) {
// 对矩阵操作...
}
int main() {
int *array = new int[rows][cols];
// ...
process(array);
delete[] array; // 确保在离开作用域前释放内存
}
```
2. **指针传递**:
如果数组长度是固定的,可以使用指向常量整数数组的指针(const int(*)[cols]),并确保函数内只读:
```cpp
void process(const int(*matrix)[cols]) {
for (int i = 0; i < rows; ++i) {
for (int j = 0; j < cols; ++j) {
// 只读操作
}
}
}
```
3. **智能指针(如果支持)**:
C++11及以上版本,可以考虑使用`std::unique_ptr<std::array<int, cols>[]>`等智能指针来管理动态分配的二维数组,它们会在析构时自动删除内存。
阅读全文