二维数组指针的用法

admin 38 0

二维数组指针在C和C++中是一种常见的用法,它允许你以更灵活的方式处理二维数组,以下是一些关于二维数组指针的基本用法:

1. **定义和初始化**:

```c

int **arr;

arr = malloc(3 * sizeof(int *));

for(int i = 0; i < 3; i++) {

arr[i] = malloc(4 * sizeof(int));

}

这里,`arr`是一个指向指针的指针,每个指针指向一个整数数组。
2. **赋值**:


```c
arr[0][0] = 10;
arr[1][1] = 20;
arr[2][2] = 30;

3. **访问**:

使用两个`*`可以访问二维数组中的元素,`arr[i][j]`表示第`i`行第`j`列的元素。

4. **释放内存**:

当你不再需要这个二维数组时,要确保释放之前分配的内存。

free(arr[i]);

free(arr);

5. **指针的指针**:
如果你有一个二维数组,你可以将其视为一个指向指针的指针。例如,考虑以下代码:


```c
int arr[3][4] = { {1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12} };

你可以将其视为:`int **arr`,其中`arr[0]`、`arr[1]`和`arr[2]`都是指向包含4个整数的数组的指针,`arr[0]`等价于`&arr[0][0]`,`arr[1]`等价于`&arr[1][0]`,以此类推。

6. **动态分配**:

与上面的例子类似,你也可以动态地为二维数组分配内存:

int **arr = malloc(3 * sizeof(int *));

7. **作为函数参数**:
你可以将二维数组作为指向指针的指针传递给函数:


```c
void printArray(int **arr, int rows, int cols) {
    for(int i = 0; i < rows; i++) {
        for(int j = 0; j < cols; j++) {
            printf("%d ", arr[i][j]);
        }
        printf("\n");
    }
}

`printArray(arr, 3, 4);`,当传递二维数组给函数时,它实际上是按值传递的,所以如果你在函数内部修改了数组,原始数组不会被更改,如果你传递的是指向指针的指针(如上面的例子),那么原始数据可以被修改。