分类: C/C++
2008-05-31 10:12:47
C语言 指针学习笔记 3
从n个数中找出其中最大值和最小值。
调用一个函数只能得到一个返回值,今用全局变量在函数之间“传递”数据。程序如下:
Author:yuexingtian
Date:Thursday May 30, 2008
/*数组名作函数参数*/ int max,min; /*全局变量*/ void max_min_value(int array[],int n) { int *p,*array_end; array_end=array+n; max=min=*array; for(p=array+1;p if(*p>max)max=*p; else if(*p return; } main() { int i,number[10]; printf("enter 10 integer numbers:\n"); for(i=0;i<10;i++) scanf("%d",&number[i]); max_min_value(number,10); printf("\nmax=%d\nmin=%d",max,min); getch(); } |
测试结果:
说明:
1) 在函数max_min_value中求出的最大值和最小值放在max和min中。由于它们是全局,因此在主函数中可以直接使用。
2) 函数max_min_value中的语句:
max=min=*array;
array是数组名,它接收从实参传来的数组numuber的首地址。
*array相当于*(&array[0])。上述语句与 max=min=array[0];等价。
3) 在执行for循环时,p的初值为array+1,也就是使p指向array[1]。以后每次执行p++,使p指向下一个元素。每次将*p和max与min比较。将大者放入max,小者放min。
4) 函数max_min_value的形参array可以改为指针变量类型。实参也可以不用数组名,而用指针变量传递地址。
程序可改为:
int max,min; /*全局变量*/ void max_min_value(int *array,int n) { int *p,*array_end; array_end=array+n; max=min=*array; for(p=array+1;p if(*p>max)max=*p; else if (*p return; } main() { int i,number[10],*p; p=number; /*使p指向number数组*/ printf("enter 10 integer numbers:\n"); for(i=0;i<10;i++,p++) scanf("%d",p); p=number; max_min_value(p,10); printf("\nmax=%d\nmin=%d",max,min); getch(); } |
运行结果与前一个程序一样!