函数的参数

来源:互联网 发布:淘宝宝贝描述怎么提高 编辑:程序博客网 时间:2024/05/18 19:45

参数的传递

一元运算符可发取得变量的存储地址。设pool 是一个变量的名字,那么&pool 就是变量的地址。一个变量的地址可发看作是该变量的在内存中的地址。例:

以下的语句:

Pool=24; 

并且假定pool的存储地址为0B78;那么语句:

Printf(“%d%p\n”,pool,&pool);

将输出以下数值:(%p是输出地址的说明符)

24 0B78

如例:

#include<stdio.h>#include<stdlib.h>void interchange(int u,int v);int main(void){int x=5,y=10;printf("Originally x =%d and y=%d\n",x,y);interchange(x,y);printf("nows x =%d and y=%d\n",x,y);system("pause");return 0;}void interchange(int u,int v){int temp;temp=u;u=v;v=temp;}

基输出结果:


 可知,其输出结果并没有交换。

若输出结果即printf();两个函数的子函数中显示,那么其值就会交换。即:

interchange()改为:

void interchange(int u,int v){int temp;printf("Originally u =%d and v=%d\n",u,v);temp=u;u=v;v=temp;printf("nows u =%d and v=%d\n",u,v);}

结果:



可知函数interchange()并没有错误,u 和v 的值确实得到了交换。问题出现在把执行结果传递给函数main()的时候。Interchange()使用的就是独立于函数main();因此交换u 和v 的数值对x 和 y 没有任何影响。

 应该怎样解决?指针。

指针是其数值为为地址的变量。

用指针解决函数间的通信问题:

#include<stdio.h>#include<stdlib.h>void interchange(int *u,int *v);int main(void){int x=5,y=10;printf("Originally x =%d and y=%d\n",x,y);interchange(&x,&y);printf("nows x =%d and y=%d\n",x,y);system("pause");return 0;}void interchange(int *u,int *v){int temp;temp=*u;*u=*v;*v=temp;}

结果:


 

 函数调用语句如下:

Interchange(&x,&y);

函数传递的是地址而不是它们的值。意味着interchange()函数原型声明和定义中的形式参数u 和 v 将使用地址作为它们的值。因此,应该声明为指针。由于x 和 y 都是整数,所以u和v 是指向整数的指针。其声明如下:

Void interchange(int * u,int *v);

接下来,函数体进行如下声明:

Int temp;

从而提供所需的临时变量。

 

在ANSI原型中可以省略变量名称。这样,函数原型可以进行如下声明:

Void interchange(int*,int*);

 

Function1(x);//这时是传递x的值。

Function2(&x);//这时是传递x 的地址。

第一种调用形式要求函数定义部分必须包含一个和x 具有相同数据类型的形式参数。

Function1(int num);

第二种调用形式要求函数定义部分必须是指向相应数据类型的指针:

Function2(int *ptr);

要使用函数进行数据操时,可以使用第一种形式,但是,如果需要改变调用函数中的多个变量的值时,就需要用到第二种形式。

总之,interchange()只是使用局部变量,但是通过指针,该函数可以操作main()中的变量值。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

                                                                                                                                             

原创粉丝点击