找到数组中的最大值和最小值

为什么数组传入函数后的sizeof不对了,因为数组作为形参传入函数后会退化成指针。

对一个地址来取大小呢,如果是32位系统的话即为4,如果是64位系统的话为8,所以呢,在函数中sizeof获取的是指针的长度而不是数组的长度。第二呢,在函数中,sizeof的处理时间的在编译期,也就是说对于动态生成的数组大小是不能用sizeof来算出来的。

 

 

通过指针来返回修改的值的时候不能做如下操作

可以看见,这会导致地址被修改,指针地址指向了别的地方,不能带回修改以后的值了

 是赋值

是改地址

 

  1. 定义数组,传入数组(调用函数的传入数组用的是数组名)、数组长度、最大值和最小值(记得加&,要不然没用,值不会改变的)
  2. 在求最值函数中接收时,所有的变量都要带上类型,变量名称可以相同,记得*符号
  3. 令数组的第一个数为最小值和最大值
  4. 遍历这个数组,遍历的的终止条件是数组的长度,两个判断,一个判断与最小值的关系,一个判断与最大值的关系。带着*号的变量的改变会使原来的变量改变,所以*min和*max带回了数组的两个最值
#include <stdio.h>

void FindMin(int a[],int *min) ;
void FindMax(int a[],int *max); 

int main(){
	int a[]={20,9,30,4,6};	
	int max,min;
	
	FindMin(a,&min);	
	FindMax(a,&max);
	
	printf("max=%d,min=%d",max,min);	
} 

void FindMin(int a[],int *min){
	  *min=a[0];
	  
	  for(int i=0;i<5;i++){
	  	if(a[i]<*min){
	  		int temp;
	  		temp=a[i];
	  		a[i]=*min;
	  		*min=temp;
		  }
	  }		
}

void FindMax(int a[],int *max){
	  *max=a[0];
	  
	  for(int i=0;i<5;i++){
	  	if(a[i]>*max){
	  		int temp;
	  		temp=a[i];
	  		a[i]=*max;
	  		*max=temp;
		  }
	  }	
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值