• C语言——二维数组作为函数的参数,求二维数组的最大值


    在C语言中,二维数组作为函数的参数传递时,实际上可以通过两种主要方式来实现:一种是直接传递二维数组的名称(这种方式中,第二维的大小通常是可选的,但第一维的大小在数组声明时是必须的,除非使用指针的指针或变长数组),另一种是通过传递指向数组的指针(这通常意味着使用指针的指针,因为二维数组本质上是数组的数组)。

    1. 直接传递二维数组名称

    当你直接传递二维数组的名称给函数时,你可以省略第二维的大小,因为数组的第二维大小在编译时是自动根据提供的数组来确定的。然而,你必须在函数原型和函数定义中明确指定第一维的大小(除非使用变长数组或者指针的指针)。但是,由于C语言的特性,在函数参数中通常不会检查数组的第一维大小,这意味着你可以在函数内部处理不同大小的数组(只要它们在运行时不超过实际分配的内存大小)。

    1. #include
    2. void printArray(int arr[][3], int rows) {
    3. for (int i = 0; i < rows; i++) {
    4. for (int j = 0; j < 3; j++) {
    5. printf("%d ", arr[i][j]);
    6. }
    7. printf("\n");
    8. }
    9. }
    10. int main() {
    11. int myArray[2][3] = {{1, 2, 3}, {4, 5, 6}};
    12. printArray(myArray, 2); // 传递二维数组名和行数
    13. return 0;
    14. }

    2. 使用指针的指针

    另一种方法是使用指向指针的指针(即指针的指针),这种方式更加灵活,因为它允许你在函数内部修改指向数组的指针,这在处理动态分配的二维数组时特别有用。

    1. #include
    2. #include
    3. void printArray(int **arr, int rows, int cols) {
    4. for (int i = 0; i < rows; i++) {
    5. for (int j = 0; j < cols; j++) {
    6. printf("%d ", arr[i][j]);
    7. }
    8. printf("\n");
    9. }
    10. }
    11. int main() {
    12. // 动态分配二维数组
    13. int **myArray = malloc(2 * sizeof(int*));
    14. for (int i = 0; i < 2; i++) {
    15. myArray[i] = malloc(3 * sizeof(int));
    16. for (int j = 0; j < 3; j++) {
    17. myArray[i][j] = i * 3 + j + 1;
    18. }
    19. }
    20. printArray(myArray, 2, 3); // 传递指向指针的指针、行数和列数
    21. // 释放内存
    22. for (int i = 0; i < 2; i++) {
    23. free(myArray[i]);
    24. }
    25. free(myArray);
    26. return 0;
    27. }

    请注意,在使用指针的指针时,你需要自己管理内存(如示例中的mallocfree),这在处理大型或动态数据结构时非常重要。此外,由于这种方法更加灵活,它也允许你创建具有不同列数的二维数组(尽管在上面的示例中所有行都有相同的列数)。

    3.创建一个三行四列二维数组并求其最大值

    代码如下:

    1. #include
    2. void initArray(int array[][4],int row,int list)
    3. {
    4. int i;
    5. int j;
    6. for(i=0;i
    7. for(j=0;j
    8. printf("请输入第%d行第%d列的数据:",i+1,j+1);
    9. scanf("%d",&array[i][j]);
    10. }
    11. }
    12. }
    13. void printArray(int array[][4],int row,int list)
    14. {
    15. int i;
    16. int j;
    17. for(i=0;i
    18. for(j=0;j
    19. printf("%-5d ",array[i][j]);
    20. }
    21. putchar('\n');
    22. }
    23. }
    24. int getMaxFromArray(int array[][4],int row,int list)
    25. {
    26. int i;
    27. int j;
    28. int max;
    29. for(i=0;i
    30. for(j=0;j
    31. if(max
    32. max = array[i][j];
    33. }
    34. }
    35. }
    36. return max;
    37. }
    38. int main()
    39. {
    40. int array[3][4];
    41. int max;
    42. initArray(array,3,4);
    43. printArray(array,3,4);
    44. max = getMaxFromArray(array,3,4);
    45. printf("三行四列数组中最大值为:%d\n",max);
    46. }

    输出将是:

    1. 请输入第1行第1列的数据:564
    2. 请输入第1行第2列的数据:98465
    3. 请输入第1行第3列的数据:122
    4. 请输入第1行第4列的数据:156
    5. 请输入第2行第1列的数据:8456
    6. 请输入第2行第2列的数据:6485
    7. 请输入第2行第3列的数据:15423
    8. 请输入第2行第4列的数据:132
    9. 请输入第3行第1列的数据:653
    10. 请输入第3行第2列的数据:56412
    11. 请输入第3行第3列的数据:65123
    12. 请输入第3行第4列的数据:652
    13. 564 98465 122 156
    14. 8456 6485 15423 132
    15. 653 56412 65123 652
    16. 三行四列数组中最大值为:98465

    注意:

    为了输出数组的美观性,在代码中,%-5d指定了printf函数输出整数时以左对齐的方式,并且每个数字至少占据5个字符的宽度。如果数字的实际宽度小于5,则在其右侧填充空格以达到指定的宽度。注意,在输出完每个数组元素后,我们还添加了一个空格(" ")来分隔不同的元素,可以根据实际需求进行调整。

  • 相关阅读:
    Property和Attribute的区别
    基于jsp+mysql+ssm协同办公系统-计算机毕业设计
    [每周一更]-(第18期):Postman全局配置token信息,加速测试接口进度
    MediaCodec 同步方式完成AAC硬解成PCM
    DCDC: 环路稳定性的测量方法-穿越频率和相位裕度
    Django网站开发技术的应用(理论篇)
    你连分布式+并发+Redis+JVM+Redis都讲不清楚,老板凭什么给你升职加薪呢?
    【Linux】谈谈shell外壳是什么?
    Bean的作用域和生命周期
    第六篇、静态代理模式与Lamda表达式
  • 原文地址:https://blog.csdn.net/weixin_45720999/article/details/140463450