【指针与二维数组】求二维数组的最大值

题目描述

输入一个n*m的二维数组(n,m<=5),求该数组中的最大值,要求使用元素指针实现

输入

第一行输入两个整数n和m

第二行输入n*m个整数

输出

输出最大值

样例输入

2 3 1 2 3 4 5 6

样例输出

6

#include <stdio.h>
main()
{
    int a[5][5];
    int * pa, i,n,m;  //pa为指向数组元素的指针
     int max,c,row,col; 
    pa=*a;        //指针指向首元素 
     scanf("%d%d",&n,&m);
    for(row=0;row<n*m;row++,pa++)
    	scanf("%d",pa);  //pa需要向后移动
    pa=*a;  //指针重新指向首元素 	
     max=*pa;  //设第一个单元为最大值 
     for(i=0; i<n*m; i++) 
    {
     	if (max<*(pa+i))
  	{
	     	max=*(pa+i);
        }
    }
    printf("%d\n",max);
}

首先需要说明的是,pa是一个指针,它指向的是二维数组的一个元素,

pa=*a ,则代表pa被初始化为二维数组的第一个元素,因此要输入二维数组的首元素:scanf("%d",pa)而不是scanf("%d",*a)因为*a是二维数组本身,而不是其中的一个元素

 

row=0;row<m*n;row++,pa++适用于遍历二维数组的一个循环,他表示从二维数组的第一个元素开始,直到遍历完所有的元素为止

具体来说,这个循环做了以下几件事:

1.初始化row=0.

2.判断row二维数组的总行数(m*n)

3.如果row小于二维数组的总行数,则pa向后移动一位,并将row+1.

4.重复步骤2,3

这个循环可以遍历整个二维数组,因为row和pa分别表示行和列的位置

二维数组的总行数可以用m*n来表述,因为二维数组可以看走一个矩阵,其中每个元素都是一个一维数组,在矩阵中,每一行代表一个一维数组,每一列页代表一个一维数组,因此总行数就是一维数组的个数,而总列数就是每个一维数组的总长度

具体来书,如果一个二维数组可以看做是一个N行M列的矩阵,其中每个元素是一个一维数组,长度为M 

 需要注意的是,在循环中,我们使用了指针的递增操作,而不是使用了数组的索引,这是因为数组的内存是连续储存的,指针是通过递增操作依次访问数组的每一个元素的,而数组的索引需要用循环遍历整个数组,因此,使用指针递增操作可以更加高效的访问数组的元素

  • 12
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值