为什么数组传入函数后的sizeof不对了,因为数组作为形参传入函数后会退化成指针。
对一个地址来取大小呢,如果是32位系统的话即为4,如果是64位系统的话为8,所以呢,在函数中sizeof获取的是指针的长度而不是数组的长度。第二呢,在函数中,sizeof的处理时间的在编译期,也就是说对于动态生成的数组大小是不能用sizeof来算出来的。
通过指针来返回修改的值的时候不能做如下操作
可以看见,这会导致地址被修改,指针地址指向了别的地方,不能带回修改以后的值了
是赋值
是改地址
- 定义数组,传入数组(调用函数的传入数组用的是数组名)、数组长度、最大值和最小值(记得加&,要不然没用,值不会改变的)
- 在求最值函数中接收时,所有的变量都要带上类型,变量名称可以相同,记得*符号
- 令数组的第一个数为最小值和最大值
- 遍历这个数组,遍历的的终止条件是数组的长度,两个判断,一个判断与最小值的关系,一个判断与最大值的关系。带着*号的变量的改变会使原来的变量改变,所以*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;
}
}
}