#include <stdio.h>
float fun(int a[],int n,int *max,int *min);
int main()
{
int x[10],i,m,n;
float p;
for(i=0;i<10;i++)
scanf("%d",&x[i]);
p=fun(x,10,&m,&n);
printf("max=%d,min=%d,average=%.2f\n",m,n,p);
return 0;
}
float fun(int a[],int n,int *max,int *min){
int i = 0;
float sum = 0;
*max = a[0]; // max = &a[0]
*min = a[0]; //min = &a[0];
for (i = 0; i < n; i++){
sum += a[i];
if (a[i] > *max){
*max = a[i];
}
if (a[i] < *min){
*min = a[i];
}
}
return sum / n;
}
2 5 4 8 6 9 1 3 7 0
max=9,min=0,average=4.50
Process returned 0 (0x0) execution time : 6.525 s
Press any key to continue.
#include <stdio.h>
float fun(int a[],int n,int *max,int *min);
int main()
{
int x[10],i,m,n;
float p;
for(i=0;i<10;i++)
scanf("%d",&x[i]);
p=fun(x,10,&m,&n);
printf("max=%d,min=%d,average=%.2f\n",m,n,p);
return 0;
}
float fun(int a[],int n,int *max,int *min){
int i = 0;
float sum = 0;
max = &a[0]
min = &a[0];
for (i = 0; i < n; i++){
sum += a[i];
if (a[i] > *max){
max = &a[i];
}
if (a[i] < *min){
min = &a[i];
}
}
return sum / n;
}
结果:
2 5 4 8 6 9 1 3 7 0
max=6356940,min=6356712,average=4.50
Process returned 0 (0x0) execution time : 1.533 s
Press any key to continue.
上面两端程序中,不同的地方为第一个为 *max= a[0]; *min = a[0],*max = *a[i],*min= *a[i];
第二个为:min = &a[0],min = &a[0],max = &a[i],min= &a[i];
但是输出结果却不同
第一个为正确结果,因为第二个中,min的值都是地址,在主程序中%d输出,输出的就是min的值,即为地址
*min是修改min地址中的内容,而不是改变地址,本题要求的就是修改原变量的内容,而不是修改地址
可以这样理解形参中的第三、第四个参数都是指针,但他们的作用是指向主函数中的某个变量,在自定义函数中要把*min和*min都当做是int 型的整数来对待
#include <stdio.h>
int main(){
int var1 = 10;
int var2 = 20;
swap(&var1, &var2);
printf("var1=%d,var2=%d",var1,var2);
}
void swap(int *pvar1, int *pvar2){
int temp = *pvar1;
*pvar1 = &pvar2;
*pvar2 = temp;
}
var1=0000000A,var2=00000014
var1=20,var2=10
交换后两个数的地址var1=00000014,var2=0000000A
Process returned 0 (0x0) execution time : 0.470 s
Press any key to continue.
void swap(int *pvar1, int *pvar2){
int temp = pvar1;
pvar1 = pvar2;
pvar2 = temp;
}
var1=0000000A,var2=00000014
var1=10,var2=20
交换后两个数的地址var1=0000000A,var2=00000014
Process returned 0 (0x0) execution time : 0.330 s
Press any key to continue.
这是交换两个数的程序,交换前和交换后,var1和var2的地址交换了,并不是只是交换地址中的内容,