c语言中向函数传递二维矩阵的方法

发布时间 2023-11-27 14:08:30作者: 风中狂笑

在C语言中,向函数传递二维数组有几种方式,这主要取决于二维数组的大小是否已知。下面是几种常见的方式:   

1)如果二维数组的大小已知,那么你可以在函数参数中直接指定数组的大小。例如:  void func(int arr[10][10]) { ... }  在这个例子中,func函数接受一个10x10的二维数组作为参数。   

2)如果二维数组的第一维的大小未知,但是第二维的大小已知,那么你可以只指定第二维的大小。例如:  void func(int arr[][10], int size) { ... }  在这个例子中,func函数接受一个二维数组作为参数,数组的第二维的大小是10,第一维的大小是size。   

3)如果二维数组的大小完全未知,那么你可以将其视为一个指针的指针。例如:  void func(int **arr, int rows, int cols) { ... }  在这个例子中,func函数接受一个指针的指针作为参数,然后使用rows和cols参数来获取数组的大小。   

需要注意的是,如果你选择使用指针的指针来表示二维数组,那么你需要使用动态内存分配(例如malloc或者calloc函数)来创建二维数组,并在使用完后使用free函数来释放内存。    

 

int sum2DArray(int **arr, int *start, int *end)
{
    int sum = 0;
    // int *p = *arr;
    int *p = NULL;
    p = start;
    while (p < end)
    {
        sum += *p;
        p++;
    }
    return sum;
}

void main(){
    int arr1[3][4] = {0};
    int arr2[3][4] = {0};
    int arr3[3][4] = {0};
    for (i = 0; i < 3; i++)
    {
        for (j = 0; j < 4; j++)
        {
            arr1[i][j] = i + j;
            arr2[i][j] = i - j;
            arr3[i][j] = i * j;
        }
    }
    int *ptr_arr_start = &arr2;
    int *ptr_arr_end = &arr2 + 1;
    sum = sum2DArray(arr2, ptr_arr_start, ptr_arr_end);

}