二维数组作为函数参数并修改原来的二维数组
时间: 2025-05-14 18:31:58 浏览: 24
### C/C++ 中传递二维数组并修改原始数组
在 C 和 C++ 中,可以通过指针或者引用的方式将二维数组传递给函数,并对其进行修改。以下是具体的实现方式:
#### 使用指针传递二维数组
当使用指针传递二维数组时,可以将其视为一维数组来操作。假设有一个 `m×n` 的二维数组,则可以通过计算偏移量访问任意位置。
```cpp
void modifyArray(int* array, int rows, int cols) {
for (int i = 0; i < rows; ++i) {
for (int j = 0; j < cols; ++j) {
array[i * cols + j] += 10; // 对每个元素加10
}
}
}
// 调用示例
const int matrix_rows = 4;
const int matrix_cols = 4;
int matrix[matrix_rows][matrix_cols] = { { 1, 2, 8, 9 }, { 2, 4, 9, 12 }, { 4, 7, 10, 13 }, { 6, 8, 11, 15 } };
modifyArray((int*)matrix, matrix_rows, matrix_cols);
```
上述代码展示了如何通过指针传递二维数组并对其中的元素进行修改[^2]。
---
#### 使用引用传递二维数组
另一种更直观的方法是直接传递二维数组的引用。这种方式需要指定数组的具体大小。
```cpp
void modifyArrayRef(int (&array)[4][4]) {
for (int i = 0; i < 4; ++i) {
for (int j = 0; j < 4; ++j) {
array[i][j] *= 2; // 将每个元素乘以2
}
}
}
// 调用示例
int matrix[4][4] = { { 1, 2, 8, 9 }, { 2, 4, 9, 12 }, { 4, 7, 10, 13 }, { 6, 8, 11, 15 } };
modifyArrayRef(matrix);
```
此方法更加清晰易懂,但在定义函数时需提前知道数组的确切维度。
---
### Python 中传递二维数组并修改原始数组
在 Python 中,列表(list)是一种天然支持多维结构的数据类型。可以直接将嵌套列表作为参数传入函数,并对其内部数据进行修改。
```python
def modify_array(array):
for row in range(len(array)):
for col in range(len(array[row])):
array[row][col] += 5 # 每个元素增加5
# 调用示例
matrix = [[1, 2, 8, 9], [2, 4, 9, 12], [4, 7, 10, 13], [6, 8, 11, 15]]
modify_array(matrix)
print(matrix)
```
由于 Python 列表是可变对象,在函数中对列表的操作会直接影响到原始变量[^1]。
---
### 结合 C++ 动态库与 Python 修改二维数组
如果需要从 Python 调用 C++ 编写的动态链接库(DLL 或 SO 文件),则可以借助 `ctypes` 库完成这一过程。以下是一个完整的例子:
#### C++ 部分:创建 DLL/SO 文件
编写一个简单的 C++ 函数用于修改二维数组,并导出该函数供外部调用。
```cpp
extern "C" void modifyMatrix(int* matrix, int rows, int cols) {
for (int i = 0; i < rows; ++i) {
for (int j = 0; j < cols; ++j) {
matrix[i * cols + j] -= 3; // 每个元素减去3
}
}
}
```
编译生成共享库文件(Windows 下为 `.dll`,Linux/MacOS 下为 `.so`)。
---
#### Python 部分:加载并调用 C++ 函数
利用 `ctypes` 加载动态库,并将 Python 列表转换为适合 C++ 处理的形式。
```python
import ctypes
from ctypes import c_int, POINTER
# 加载动态库
lib = ctypes.CDLL('./your_library.so') # 替换为实际路径
# 设置函数原型
lib.modifyMatrix.argtypes = [POINTER(c_int), ctypes.c_int, ctypes.c_int]
# 创建二维数组并展平
matrix = [
[1, 2, 8, 9],
[2, 4, 9, 12],
[4, 7, 10, 13],
[6, 8, 11, 15]
]
rows = len(matrix)
cols = len(matrix[0])
flattened_matrix = (c_int * (rows * cols))(*[item for sublist in matrix for item in sublist])
# 调用 C++ 函数
lib.modifyMatrix(flattened_matrix, rows, cols)
# 还原为二维形式
for r in range(rows):
start_idx = r * cols
end_idx = start_idx + cols
matrix[r] = list(flattened_matrix[start_idx:end_idx])
print(matrix)
```
这段代码实现了从 Python 调用 C++ 函数的功能,并成功修改了原始二维数组的内容[^3]。
---
阅读全文
相关推荐

















