c语言基础笔记(9.c语言当中的函数)

9.1 函数的原型和调用

在使用一个函数前必须定义或者声明函数。

9.2 函数的形参与实参

在调用函数的时候,函数大多数都有参数,主调函数和被调用函数之间需要传递数据。
在定义函数时函数名后面括弧中的变量名称为“形式参数”,简称形参。在调用函数时,函数名后面括号中的变量或表达式称为“实际参数”,简称实参。
1 形参在未出现函数调用时,他们并不占用内存单元,只有在发生函数调用的时候形参才被分配内存,函数调用完成后,形参所占的内存被释放;
2 实参可以是变量,常量或者表达式;
3 在定义函数时,一定要指定形参的数据类型;
4 形参与实参的数据类型一定要可兼容;
5 在C语言中,实参与形参的数据传递是“值传递”,即单向传递,只由实参传递给形参,而不能由形参传递给实参。
如果函数的参数是个数组,那么是可以通过形参修改实参的值的。

9.3 函数的返回类型与返回值

1 函数的返回值通过函数中的return获得,如果函数的返回值为void可以不需要return语句;
2 函数return语句中的返回值数据类型应该与函数定义时相同;
3 如果函数中没有return语句,那么函数将返回一个不确定的值。

如果C语言一个函数没有明确的标明函数的返回类型,那么函数的返回类型就是int;
如果一个函数没有返回值,那么函数的返回类型是void;

9.4 main函数与exit函数与函数的return语句

exit(0); //在子函数中调用exit同样代表程序终止,但在子函数中调用return只是子函数终止,程序正常执行。
exit是C语言的库函数,调用exit的结果就是程序终止,在main函数中调用exit与调用return是一样的;
main函数return代表程序终止。

9.5 多个源代码文件程序的编译
9.5.1 头文件的使用
如果把main函数放在第一个文件中,而把自定义函数放在第二个文件中,那么就需要在第一个文件中声明函数原型。
如果把函数原型包含在一个头文件里,那么就不必每次使用函数的时候都声明其原型了。把函数声明放入头文件是很好的习惯。
9.5.2 #include与#define的意义
#include就是简单的文件内容替换
#define就是简单的文件替换而已
9.5.3 #ifndef 与#endif
在头文件.h中,
#ifndef 宏名
#define 宏名//具体宏的名字是自定义的
//函数的声明
#endif
作用:防止多次include的同一个头文件的时候,重复预编译头文件内容
防止头文件被重复包含
#ifndef的意思就是条件预编译,如果#ifndef后面的条件成立,那么就预编译从#ifndef开始到#endif之间的代码,否则不会去预编译这段代码。
在#ifndef中的宏,一定要大写和下划线,必要的时候加数字,目的是为了避免和其他头文件中的宏名字冲突。
#ifdef,#ifndef叫条件编译语句;
#ifdef 宏,如果宏被定义了,那么编译语句;
#ifndef 宏,如果宏被定义了,那么就不编译语句。

9.6 函数的递归
函数可以调用自己,这就叫函数的递归。

#include <stdio.h>
void test(int n)
{
		if(n > 0)
		{
			n --;
			printf("先序n = %d\n",n);//先序递归,如果是先序递归,那么代码是顺序执行的
			test(n);//函数自己调用自己,就叫函数的递归
		printf("后序n = %d\n",n);//后序递归,如果是后序递归,那么代码是逆序执行的
		}
}
int main()
{
		int i = 3;
		test(i);
		return 0;
}

9.6.1 递归的过程分析

案例:将十进制转换为二进制

#include <stdio.h>
void test(int n)
{
	int i = n % 2;
	printf("%d\n",i);
	if(n > 0)
	{
		test(n / 2);
	}
}
int main()
{
	int i = 11;
	test(i);
	return 0;
}

斐波那契数列例子:
斐波那契数列指的是这样一个数列0,1,1,2,3,5,8,13,21,34,55,89,144,…
第0项是0,第1项是第一个1;
这个数列从第2项开始,每一项都等于前两项之和。

int fib(int n)
{
	if (n == 0)
		return 0;
	if (n == 1)
		return 1;
	else
	{
		return fib(n - 1) + fib(n - 2);
	}
}

9.6.2 递归的优点
递归给某些编程问题提供了最简单的方法。
9.6.3 递归的缺点
一个有缺陷的递归会很快耗尽计算机的资源,递归的程序难以理解和维护。

写在最后:最近和朋友一起在微信公众号做一些自己热爱的东西,并有许多的干货分享,大家多多关注啊!!
公众号 [越陌的数字生活]

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值