二维数组与一级指针的传参

#include<stdio.h>
//二维数组与一级指针的传参
void test(int arr[3][5]);

int main()
{
    int arr[3][5] = {{1,2,3,4,5}};
    test(arr);
}

void test(int arr[3][5])
//void test(int arr[][5])  即二维数组只能省略行,不能省略列
//如果我们用指针的方式如何表示?
//答:常见的错误示范:void test(int *arr)这种写法是错误的,*arr代表首地址,而二维数组的首地址是一个一维数组的地址,error
// void test(int* *arr)这种写法也是错误的,从主函数传过来的是一个一维数组,子函数用一个二级指针接收,但二级指针是用来存放一级指针的,error
//正确表达:我们(*arr)代表指向一维数组,是指针,(*arr)[5]代表指针(*arr)指向5个元素,int (*arr)[5] 代表指针(*arr)指向5个元素的类型是int
//void test(int (*arr)[5])
{
    ;
}
在Linux中,二维数组可以使用双重指针进行传参。 首先,定义一个函数来接收二维数组作为参数。函数的参数应该是一个指向指针指针,例如: ``` void print_array(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"); } } ``` 在这个函数中,我们可以使用两个for循环来遍历整个数组,并打印出每个元素的值。 现在,我们需要在主函数中定义一个二维数组,并将其传递给上面定义的函数。定义数组和调用函数的代码如下所示: ``` int main() { int rows = 3; int cols = 4; int **arr = (int **)malloc(rows * sizeof(int *)); for (int i = 0; i < rows; i++) { arr[i] = (int *)malloc(cols * sizeof(int)); for (int j = 0; j < cols; j++) { arr[i][j] = i * cols + j; } } print_array(arr, rows, cols); return 0; } ``` 在这个示例中,我们首先使用malloc函数来为数组分配内存空间,并使用两个for循环来初始化数组的每个元素。然后,我们调用了print_array函数,并将数组、行数和列数作为参数传递给它。 需要注意的是,我们在使用malloc函数为数组分配内存空间时,首先分配了一维数组的空间,然后再为每个一维数组分配空间。这是因为二维数组实际上是由若干个一维数组组成的,因此我们需要先为一维数组分配空间,然后再将它们组合成二维数组。 最后,记得在程序结束时释放数组占用的内存空间,以避免内存泄漏。可以使用两个for循环来释放每个一维数组的空间,然后再释放二维数组的空间,示例代码如下所示: ``` for (int i = 0; i < rows; i++) { free(arr[i]); } free(arr); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值