有意思的C——参数传递

函数的参数传递

在函数的参数传递过程中,需要明白两个概念:形式参数和实际参数

形式参数

形参出现在被调函数当中,在整个函数体内都可以使用。形参在定义时编译系统并不分配存储空间,只有在调用该函数时才分配内存单元。调用结束内存单元被释放故形参只有在函数调用时有效,调用结束时不能再使用。

实际参数

实参出现在主调函数当中,当函数调用时,主调函数把实参的值传送给被调函数的形参,从而实现函数间的数据传递。传递方式有两种:值传递和地址传递方式

参数传递

  • 函数定义时,如果函数没有参数,则参数列表写void。

  • 在调用函数时,函数没有形参可以执行调用,并传递实参,只是实参得不到实际的使用。在实际编辑中尽量不要传递参数。

  • 当被调函数存在形参时,就可以按照值传递和地址传递方式进行参数传递

实例:定义一个函数计算两个数据的和。

#include <stdio.h>
#include <stdlib.h>
//定义一个函数求两个数的和
int my_fun(int a, int b);						//声明函数
int main()
{
	int data1 = 0, data2 = 0;
	printf("Please input two int type nums\n");
	scanf_s("%d",&data1);
	printf("data1=%d\n",data1);
	scanf_s("%d", &data2);
	printf("data2=%d\n", data2);
	int sum = my_fun(data1,data2);	//调用函数
	printf("sum=%d\n",sum);
	system("pause");
	return 0;
}
int my_fun(int a, int b)						//定义函数
{
	return a + b;
}

参数传递示意图

 

注意点:

  1. 函数的形参本质时函数的局部变量,用于接外部数据的。

  2. 形参在函数定义的时候不会开辟并占用任何空间

  3. 形参在函数结束时才被释放。

  4. 函数名代表的时函数的入口地址。printf("被调函数的地址为%p\n",my_fun02);//函数名代表函数的入口地址

  5. 函数的返回值<=4字节时会先存放在寄存器若>4字节会返回存放在栈区

 

案例分析:定义函数,求数组中元素的最大值和最小值。 

#include <stdio.h>
#include <stdlib.h>
//键盘输入数组元素,输出数组元素中的最大值和最小值
//声明函数
void fun_array_get(int arr1[5], int n1);
void fun_array_print(int arr2[5], int len);
int fun_array_max(int arr3[5], int n);
int fun_array_min(int arr4[5], int n);
int main()
{
	int arr[5] = { 0 };
	int n = sizeof(arr) / sizeof(arr[0]); //定义数组和数组元素个数变量
	
	//定义函数:键盘输入获取数组元素。并调用函数执行
	fun_array_get(arr,n);

	//定义函数遍历数组元素。并调用函数执行
	fun_array_print(arr, n);

	//定义函数输出数组中最大值。并调用函数执行
	int max = fun_array_max(arr, n);
	printf("max=%d\n",max);

	//定义函数输出数组中最小值。并调用函数执行
	int min = fun_array_min(arr, n);
	printf("min=%d\n", min);

	return 0;
}
void fun_array_get(int arr1[5], int len)//定义函数:键盘输入获取数组元素
{
	int i = 0;
	printf("请输入%d个数组元素\n",len);
	for (i = 0; i < len; i++)
	{
		scanf_s("%d",&arr1[i]);
	}
	return;
}
void fun_array_print(int arr2[5],int len)//定义函数遍历数组元素
{
	int i = 0;
	for (i = 0; i < len; i++)
	{
		printf("%d ", arr2[i]);
	}
	printf("\n");
}
int fun_array_max(int arr3[5], int n)//定义函数输出数组中最大值
{
	int temp_max = arr3[0];
	int i = 0;
	for (i = 0; i < n; i++)
	{
		if (temp_max < arr3[i])
			temp_max = arr3[i];
	}
	return temp_max;
}
int fun_array_min(int arr4[5], int n)//定义函数输出数组中最小值
{
	int temp_min = arr4[0];
	int i = 0;
	for (i = 0; i < n; i++)
	{
		if (temp_min > arr4[i])
			temp_min = arr4[i];
	}
	return temp_min;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值