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

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

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

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

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

2. 使用指针的指针

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

#include <stdio.h>  
#include <stdlib.h>  
  
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");  
    }  
}  
  
int main() {  
    // 动态分配二维数组  
    int **myArray = malloc(2 * sizeof(int*));  
    for (int i = 0; i < 2; i++) {  
        myArray[i] = malloc(3 * sizeof(int));  
        for (int j = 0; j < 3; j++) {  
            myArray[i][j] = i * 3 + j + 1;  
        }  
    }  
  
    printArray(myArray, 2, 3); // 传递指向指针的指针、行数和列数  
  
    // 释放内存  
    for (int i = 0; i < 2; i++) {  
        free(myArray[i]);  
    }  
    free(myArray);  
  
    return 0;  
}

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

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

代码如下:

#include<stdio.h>

void initArray(int array[][4],int row,int list)
{
	int i;
	int j;
	
	for(i=0;i<row;i++){
		for(j=0;j<list;j++){
			printf("请输入第%d行第%d列的数据:",i+1,j+1);
			scanf("%d",&array[i][j]);
		}
	}
	
}

void printArray(int array[][4],int row,int list)
{
	int i;
	int j;
	
	for(i=0;i<row;i++){
		for(j=0;j<list;j++){
			printf("%-5d ",array[i][j]);
		}
		putchar('\n');
	}	
}

int getMaxFromArray(int array[][4],int row,int list)
{
	int i;
	int j;
	int max;
	
	for(i=0;i<row;i++){
		for(j=0;j<list;j++){
			if(max<array[i][j]){
				max = array[i][j];
			}
		}
	}	
	return max;
}

int main()
{
	int array[3][4];
	int max;
	
	initArray(array,3,4);
	printArray(array,3,4);
	max = getMaxFromArray(array,3,4);
	printf("三行四列数组中最大值为:%d\n",max);
}

输出将是:

请输入第1行第1列的数据:564
请输入第1行第2列的数据:98465
请输入第1行第3列的数据:122
请输入第1行第4列的数据:156
请输入第2行第1列的数据:8456
请输入第2行第2列的数据:6485
请输入第2行第3列的数据:15423
请输入第2行第4列的数据:132
请输入第3行第1列的数据:653
请输入第3行第2列的数据:56412
请输入第3行第3列的数据:65123
请输入第3行第4列的数据:652
564   98465 122   156
8456  6485  15423 132
653   56412 65123 652
三行四列数组中最大值为:98465

注意:

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

  • 9
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hardStudy_h

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值