形参和实参的区别

最近在做题的时候被问到了形参和实参的区别,所以在这具体解释一下。

首先什么是形参?什么是实参?

形参(形式参数)

在函数定义中出现的参数可以看做是一个占位符,它没有数据,只能等到函数被调用时接收传递进来的数据,所以称为形式参数,简称形参。

实参(实际参数)

函数被调用时给出的参数包含了实实在在的数据,会被函数内部的代码使用,所以称为实际参数,简称实参。

形参和实参的功能是传递数据,发生函数调用时,实参的值会传递给形参。

形参和实参的区别和联系

  1. 形参变量只有在函数被调用时才会分配内存,调用结束后,立刻释放内存,所以形参变量只有在函数内部有效,不能在函数外部使用。

  2. 实参可以是常量、变量、表达式、函数等,无论实参是何种类型的数据,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参,所以应该提前用赋值、输入等办法使实参获得确定值。

  3. 实参和形参在数量上、类型上、顺序上必须严格一致,否则会发生“类型不匹配”的错误。当然,如果能够进行自动类型转换,或者进行了强制类型转换,那么实参类型也可以不同于形参类型。

  4. 函数调用中发生的数据传递是单向的,只能把实参的值传递给形参,而不能把形参的值反向地传递给实参;换句话说,一旦完成数据的传递,实参和形参就再也没有瓜葛了,所以,在函数调用过程中,形参的值发生改变并不会影响实参。

接下来看几个例子:

#include<stdio.h>

void swap(int a, int b);//函数声明
int main()
{
	int x = 7, y = 11;
	printf("实参x、y的初值为:x=%d y=%d\n\n", x, y);
	swap(x, y);//调用时把下实参x,y的值传递给形参a,b
	printf("实参x、y交换后的值为:x=%d y=%d\n\n", x, y);
	//printf("x、y交换后的值为:x=%d y=%d\n\n", a, b);//报错,因为形参只能在调用函数范围内使用,不能再函数外部使用
	return 0;
}

//函数定义,这里括号中的a和b就是形参
void swap(int a, int b)
{
	int temp;
	temp = a;
	a = b;
	b = temp;
	printf("形参a=%d 形参b=%d\n\n", a, b);
}

输出结果如下:

在这里插入图片描述

这个例子说明了实参只是向形参传递其本身的数值,形参变量只是在void swap()这个函数里有效,调用这个函数结束后会立即释放内存,同时形参的值改变不会影响实参。

而且!!!

形参和实参可以同名!!!,因为它们之间是相互独立的,互不影响,因为实参在函数外部有效,而形参在函数内部有效。所以这个更能说明形参的改变影响不了实参的值。

同样上面的例子

#include<stdio.h>

void swap(int x, int y);//函数声明
int main()
{
	int x = 7, y = 11;
	printf("实参x、y的初值为:x=%d y=%d\n\n", x, y);
	swap(x, y);//调用时把下实参x,y的值传递给形参a,b
	printf("实参x、y交换后的值为:x=%d y=%d\n\n", x, y);
	//printf("x、y交换后的值为:x=%d y=%d\n\n", x, y);//不报错,但这里输出的还是实参的值
	return 0;
}

//函数定义,这里括号中的a和b就是形参
void swap(int x, int y)
{
	int temp;
	temp = x;
	x = y;
	y = temp;
	printf("形参x=%d 形参y=%d\n\n", x, y);
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值