关于参数的传递

     我们都知道函数的实现,是需要参数传递来实现的。通常我们根据传递方式划分为两种:一种是传值方式,另一种是传地址的方式。

一、传值调用

      1、区分实参和形参

         调用函数的括号里面的参数是实际参数(实参);

         被调用函数中的参数是形式参数(形参)。

       2、传值调用:建立参数的一个副本并把值传递给形式参数,在被调用函数中修改形式参数的值,并不会影响到调用函数实际参数的值【实参】》》传递》》【形参】

       3、栗子1:

#include <stdio.h>
int Add(int x,int y);//声明加法函数
void main()
{
	int a,b,sum;
	scanf("%d,%d",&a,&b);
    sum=Add(a,b);//调用求和函数
	printf("两数字之和:%d+%d=%d\n",a,b,sum);
}
int Add(int x,int y)//带形参的函数
{
	return x+y;
}


栗子2:交换数字

#include <stdio.h>
void paixu(int x,int y);
void main()
{
 int a,b;
 printf("请你输入两个数:",&a,&b);
 scanf("%d %d",&a,&b);
 printf("a=%d,b=%d\n",a,b);
 paixu(a,b);
 printf("a=%d,b=%d\n",a,b);
}
void paixu(int x,int y)
{
 int temp;
 if(x>y)
 {
  temp=x;
  x=y;
  y=temp;
 }
}


注意到了没有:上例中不管怎样输入大小数字,始终都没有排序,这是为什么呢?其实,在内存中,实际参数和形式参数分别占用不同的内存单元,形式参数只是实际参数的一个副本,一个复印件。实参和形参的值的改变,都不会相互影响。

   上例中只是改变了形参x和y的值,并没有改变到实参a和b。因而并没有交换到数据。

 

二、传地址调用

     在C语言中,可以通过指针(或地址)来实现传地址调用。下面先来个栗子进行分析:还是实现上面栗子2的。

#include <stdio.h>
void swap(int *x,int *y);
void main()
{
	int a,b;
	printf("请您输入两个整数:\n");
	scanf("%d,%d",&a,&b);
	if(a<b)
	{
		swap(&a,&b);
	}
	printf("两个整数%d和%d的较大者为:%d,较小者为:%d\n",a,b,a,b);
}
void swap(int *x,int *y)
{
	int z;
	z=*x;
	*x=*y;
	*y=z;
}


编译运行结果,实现了交换。从程序中看,调用swap(&a,&b)函数交换两个数,其中实参是变量的地址,就是把地址传递给被调用函数swap(int *x,int *y)中的形参。

                                                    而形参是指针变量,即是指针x和y指向变量a和b。这样交换*x和*y就是交换a和b。

【注】在传地址调用中,数组名也可以当做参数传递。在数组名作为参数传递时,传递的是整个数组

            数组名是数组的首地址,如果把数组名作为实际参数,在函数调用时,会把数组的首地址传递给形式参数

            形参可以根据数组的首地址访问整个数组并对其进行操作,因为整个数组的地址是连续的。

 

三、总结参数传值的那点事:

        (1)在传值调用时,参数传递是单向传递,只能有实际参数传递给形式参数,而不能把形参反向传递给实参。(不能反向)只能实参→形参;

        (2)在传地址调用时,对形参的操作就是对实际参数的操作,它们位于同一块内存单元。

 

**************************************************************************************************************************************************************************************

❤永葆一颗纯洁、宽容平和、仁慈谦卑和意气风发的心!

态度决定一切     努力改变命运

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值