目录
5. 函数的嵌套调用和链式访问
5.1 嵌套调用
5.2 链式访问
小结:
6. 函数的声明和定义
6.1 函数的声明:
6.2 函数的定义:
5. 函数的嵌套调用和链式访问
函数和函数之间可以根据实际的需求进行组合的,也就是互相调用的。
5.1 嵌套调用
代码如下,我们将代码分装在需要使用时调用函数即可。
void A()//函数A { B();//在定义A函数的时候调用B函数; } void B()//函数B { A();//在定义B函数的时候调用A函数;函数可以互相调用 } int main() { A(); B();//需要使用时直接调用函数即可 return 0; }
但值得注意的一点是:函数可嵌套,但是定义不可嵌套!
下面是嵌套定义的错误示范:
void A() { void B() { } } int main() { return 0; }
5.2 链式访问
把一个函数的返回值作为另外一个函数的参数。
为了方便大家理解,我们举个例子,比如说:打印一串字符的长度
int main() { int len = strlen("abcdef"); printf("%d\n", len); return 0; }
这里我们是先将字符长度存放在len里面,然后再将len打印出来。
我们其实可以不把返回值存到len中,而是直接打印,代码如下:
int main() { printf("%d\n", strlen("abcdef")); return 0; }
这就是链式访问,我们将上一条的返回值直接充当下一条的参数。
下面我们看一个例子:
int main() { printf("%d", printf("%d", printf("%d", 43))); return 0; }
在这道题中我们在打印了43后还要继续打印,但是我们应该打印什么呢?
在我们不了解函数的情况下,可以进入www.cplusplus.com学习!
看不懂没关系,我们可以翻译成中文:
就如上面所说,我们在打印完43后,下一个printf接收到的返回值是2,因为上一个函数有两个字符。打印完2后,下一个只接收到1个字符所以只打印1.
因此,最后结果是4321。
小结:
把一个函数的返回值作为另一个函数的参数就是链式访问。
6. 函数的声明和定义
6.1 函数的声明:
- 告诉编译器有一个函数叫什么,参数是什么,返回类型是什么。但是具体是不是存在,函数声明决定不了。
- 函数的声明一般出现在函数使用之前。要满足先声明后使用。
- 函数的声明一般要放在头文件中的。(后面会讲为什么放在头文件中)
6.2 函数的定义:
函数的定义是指函数的具体实现,交代函数功能实现。
函数的声明和定义其实和变量相似,我们先举个变量的例子。
我们可以看到,在函数里我们定义了a后再使用是没问题的。但是如果不小心放到后面:
我们可以看到它会报错:未声明的标识符;所以,我们在前面声明一下就能解决这个问题:
接下来,我们看看函数的例子:
//函数的声明 int Add(int x, int y); int main() { int a = 10; int b = 20; int c = Add(a, b); printf("%d\n", c); return 0; } //函数的定义 int Add(int x, int y) { return x + y; }
值得注意的是,我们一般在写代码的时候不会这样写,这里这样写是为了讲解函数的声明和定义,一般来说我们直接按顺序先写定义,后面要用到的时候就不用声明了。
“函数的声明一般要放在头文件中,函数的定义放在.c文件里面。”
当我们在编写项目时,往往一个程序需要很多程序员一起编写,比如说这个项目需要50个程序员,如果我们把所有的代码都放在同一个test.c文件中,那么50个程序员怎么写呢?轮流写吗?那肯定不行,所以就创建其他的头文件分模块去写。比如说我们要写一个计算器如下图:
这样让每个人的代码分模块写,最后再让一个人整合其他人的模块,再包含其他人写的代码就可以实现。举个简单的例子:(我这里是用是.cpp文件,当然最好还是用.c文件)
这样写有一定的好处,一是便于多人协作;二是可读性强;三就是如果我写的代码很重要,不想让别人看到,就可以这样。