变量的作用域
全局变量:程序中所有的函数都可以访问的量。
局部变量:只能在函数中访问的变量。
#include
void swap1(int a,int b)
{
int c;
c=a;
a=b;
b=c;
printf("swap1中的a=%d,b=%d",a,b);
}
void swap2(int *a,int*b)
{
int c;
c=*a;
*a=*b;
*b=c;
}
int main()
{
int x=100,y=800;
swap1(x,y);
printf("\n,调用swap1后x=%d,y=%d",x,y);
x=100,y=800;
swap2(&x,&y);
printf("\n调用swap2后x=%d,y=%d",x,y);
}
输出结果:
swap1中的a=800,b=100
,调用swap1后x=100,y=800
调用swap2后x=800,y=100
很显然,在调用swap1之后没有交换值,是因为swap1函数在本函数体内实现了值的交换,而当函数swap1调用结束后,由于a,b是局部变量,所以a,b的值的变化结果无法正常带出。
而swap2是用指针方式,调用swap2时,采用的是地址传递,实参传递的是变量x,y的地址,通过访问指针变量a,b的所指向的实参单元,实现了主函数变量x和y中值的交换。x和y的变量相对于swap2而言,是全程有效的。
函数结果的带出方式:
全程量,函数返回值,地址参数三种。
???
返回一个结果值时,用return方式直接带出。
需要多个结果值时,仅用return带出一个结果就不够。
例:求n个数的最大值和最小值
全称量=全局变量方式
fun1()函数将最小值MIN以全局变量的方式带出
int fun1(int a[],int a)/*通过函数return返回最大值,通过全局变量MIN带回最小值*/
{
int i,max;
max=MIN=a[0];
for(i=0;i
{
if(a>max) max=a
if(a>MIN) MIN=a
}
return(max);
}
数组方式
返回多个相同类型的值,则可以讲这些值放到数组中,然后返回数组指针或首地址。fun2()函数的数组b,带出两个值。
int *fun2(int a[],int n)
{
static int b[2];
b[0]=b[1]=a[0];
int i;
for(i=1;i {
if(a>b[0]) b[0]=a;
if(a;
}
return(b);
}
结构体方式
返回多个不同类型的值,则将这些值放到结构体中,返回结构体的指针或结构体变量。fun3(),fun4()函数,将最大值,最小值放到结构体p中。
Data *fun3(int a[],int n)
/*将最大值,最下值放到结构体指针p中,通过return返回*/
{
Data *p;
int i;
p=(Data *)malloc(sizeof(Data *));
p->max=p->min=a[0];
for(i=1;i
{
if(a>p->max) p->max=a;
if(a>p->min) p->min=a;
}
return (p);
}
结构体方式
Data *fun4(int a[],int n)
/*将最大值,最小值放到结构体指针p中,通过结构体p带回返回值*/
{
Data p;
int i;
p.max=p.min=a[0];
for(i=1;i {
if(a>p.max) p.max=a;
if(a>p.min) p.min=a;
}
return (p);
}
指针方式 通过地址返回值带出是一种参数显式传递方式。fun5()函数中指针p指向最大值,q指向最小值。
- void fun5(int a[],int n,int *p,int *q)
- {
- int i;
- *p=*q=a[0];
- for(i=1;i
- {
- if(*p
- if(*q>a) *q=a;
- }
- }
curton 2020-2-6 13:48