自定义函数的定义与调用(一):变量和数组作为的函数的参数调用

在C语言中函数一般分为库函数与自定义函数;C语⾔标准中规定了C语⾔的各种语法规则,C语⾔并不提供库函数;C语⾔的国际标准ANSIC规定了⼀些常⽤的函数的标准,被称为标准库,那不同的编译器⼚商根据ANSI提供的C语⾔标准就给出了⼀系列函数的实现。这些函数就被称为库函数。
库函数头文件中文网站:https://zh.cppreference.com/w/c/header
相比库函数,⾃定义函数其实更加重要,也能给程序员写代码更多的创造性。接下来简单介绍一下自定义函数相关用法。
:文章中的例子只是为了解释知识点,没有其他目的。

自定义函数的结构

ret_type fun_name(形式参数)
{
}

ret_type:函数的返回类型;
fun_name:函数名称;
()里面放的是自定义函数的建立形参;
{}函数代码段(主体);
:函数的形参只是实参的一份临时拷贝,对形参的值进行更改不会影响到实参

变量传参

举个例子

用自定义函数编写一个加法函数

#include<stdio.h>
int ADD(int a,int b)//自定义加法,x,y为形参
{
return a+b;
}
int main()//主函数
{
int x,y;
scanf("%d %d",&x, &y);
int ret = ADD(x,y);//调用加法函数,x,y为实参,将结果存放到变量ret中
printf("%d",ret);//打印结果
return 0;
}

运行结果如图:
在这里插入图片描述
在上面说过形参是实参的临时拷贝,我们这段代码进行调试观察一下是否属实:
在这里插入图片描述
我分别取了形参和实参的地址以供大家参考,从这张图就能看出形参和实参的地址是不一样的。所以我们即使在函数中对形参的值进行更改也不会影响到实参。

return语句

在函数的设计中,函数中经常会出现return语句,这⾥讲⼀下return语句使⽤的注意事项。
• return后边可以是⼀个数值,也可以是⼀个表达式,如果是表达式则先执⾏表达式,再返回表达式
的结果。
• return后边也可以什么都没有,直接写 return; 这种写法适合函数返回类型是void的情况。
• return返回的值和函数返回类型不⼀致,系统会⾃动将返回的值隐式转换为函数的返回类型。
• return语句执⾏后,函数就彻底返回,后边的代码不再执⾏。
• 如果函数中存在if等分⽀的语句,则要保证每种情况下都有return返回,否则会出现编译错误。

数组传参

这里也用一个例子来说明:将一个数组的内容全部置1,并打印出来。
思路:先定义一个整形数组
自定义一个函数,通过数组传参让函数实现全部赋值为1;
自定义一个函数,通过数组传参来打印这个数组。

基本框架

#include<stdio.h>
void Init(int a[10])
{
}
void Print(int a[10])
{
}
int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	Init(arr);//给数组全部值1
	Print(arr);//打印数组内容
	return 0;
}

接下来对这个框架进行填充

#include<stdio.h>
void Init(int a[10])
{
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		a[i] = 1;
	}
}
void Print(int a[10])
{
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		printf("%d ", a[i]);
	}
}
int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	Init(arr);//给数组全部值1
	Print(arr);//打印数组内容
	return 0;
}

void Init(int a[10]) 定义时[]里面的10是告诉函数对于传参这个数组需要接受几个元素,一维数组也可以不写大小,传参的一些要求总结了几点:
• 函数的形式参数要和函数的实参个数匹配
• 函数的实参是数组,形参也是可以写成数组形式的
• 形参如果是⼀维数组,数组⼤⼩可以省略不写
• 形参如果是⼆维数组,⾏可以省略,但是列不能省略
• 数组传参,形参是不会创建新的数组的
• 形参操作的数组和实参的数组是同⼀个数组
在这里插入图片描述
如图,结果完美符合我们的要求。这样就完成了通过调用函数来初始化和打印数组。

函数的嵌套

嵌套调⽤就是函数之间的互相调⽤,就是在运行一个函数时在这个函数内部调用了其他的函数。
比如要实现 x*(y+z)z,我们在已经编写好的加法程序上加以改进:

#include<stdio.h>
int ADD(int a, int b)//自定义加法,x,y为形参
{
	return a + b;
}
int MUL(int a, int b, int c)
{
	return a*ADD(b, c);//在乘法函数里调用ADD
}
int main()//主函数
{
	int x, y,z;
	scanf("%d %d %d", &x, &y,&z);
	int ret = MUL(x, y,z);//调用加法函数,x,y为实参,将结果存放到变量ret中
	printf("%d", ret);//打印结果
	return 0;
}

在这里插入图片描述

链式访问

所谓链式访问就是将⼀个函数的返回值作为另外⼀个函数的参数,像链条⼀样将函数串起来就是函数的链式访问。
上面的加法代码中,我们是将加法的值返回给一个变量,在利用这个变量来打印最终值。

int ret = MUL(x, y,z);//调用加法函数,x,y,z为实参,将结果存放到变量ret中
	printf("%d", ret);//打印结果

链式访问就是把“MUL(x, y,z)”作为一个函数的参数或者说变量来直接使用:

printf("%d", MUL(x, y, z));

上面这条代码我们将"MUL(x,y,z)"即作为调用函数使用,还作为一个变量直接打印出来,这就是链式访问。
----------------------------------------分隔符
变量和数组作为的函数的参数调用基本介绍完了,以上都是个人理解,如有错误请指正,共勉。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值