实参和形参的区别

初学者会迷惑实参与形参有什么实际区别,没详细了解又会有什么影响,我就在这详细的讲解。

涉及到了函数的传调用与传调用的区别。

函数的参数中分为实际参数与形式参数。

在调用函数时主函数需要给自定义函数传递参数,函数中有实参与形式之分,在主函数中的传值操作是实参,自定义函数的接收值操作是形参,形参是实参临时拷贝,修改形参对实参没有实际影响。

说白了就是实参与形参都占有独立的内存块,想修改形参值就得用指针传递地址给函数。

接下来我就用两个简单例子来实操一下

这个是正确的传参操作

void Swap(int*x,int*y)//形参
{
	int tmp = *x;
	*x = *y;
	*y = tmp;
}
int main()
{

	int a = 10;
	int b = 20;
	Swap(&a,&b);//实参
	printf("%d %d", a, b);
	return 0;
}

 这个是错误的传参。

void Swap(int x,int y)//形参
{
	int tmp = x;
	x = y;
	y = tmp;
}
int main()
{

	int a = 10;
	int b = 20;
	Swap(a,b);//实参
	printf("%d %d", a, b);
	return 0;
}

上文我有说过,实参与形参都有独立的内存块,上图只传递了值而没有传递地址,所以在Swap函数中的形参与main函数中实参是不同的内存块,Swap函数中换值操作已经执行过,因为他们的栈空间不同,Swap的函数换值操作是无法被main函数所接收。

说这么多简单概括,就是对自定义函数有改值操作时,就得用指针传递地址,让自定义函数与main函数地址一致,简单说就是传址调用时自定义函数可以修改main函数的数值。

有不足的地方还请指正。

猜你喜欢

转载自blog.csdn.net/m0_66977204/article/details/130451293
今日推荐