目录

一.函数的嵌套调用

二.函数的访问方式之链式访问 

三.函数的定义和声明

1 函数声明:

2 函数定义:

一.函数的嵌套调用

定义:当程序执行函数的时候,会发现函数中存在着另一个函数,在函数中调用函数,被称为嵌套式调用

#include <stdio.h>
void test1()
{
 printf("hello world!\n");
}

void test2()
{
    int i = 0;
 for(i=1; i<5; i++)
   {
        test1();
   }
}
int main()
{
 test2();
 return 0;
}

       调用第一个函数后进入,在循环体中调用第二个函数,就好比循环的嵌套一样外层循环先执行一次,里层的循环就执行一圈,嵌套函数也是如此。

 需要注意的是:函数间只能嵌套调用,不可嵌套定义,那什么是嵌套定义?如下图代码(错误例子示范) 

//嵌套定义的错误示范
int  Add(int x, int y) {
    int  Sub(int x, int y) {
        return x - y;
    }
    return x + y;
}
int main()
{
    int a = 10;
    int b = 20;
    int sum = Add(a,b);
    printf("%d\n", sum);
    return 0;
}

         上图代码就是在一个函数中嵌套定义了另一个函数,这是万万不可的,而且系统会报错,是非法的代码。我们应该清楚的了解到:每一个函数之间都是独立的,可以根据实际的需求相互组合,也就是互相调用,但就是不允许嵌套定义!!!


二.函数的访问方式之链式访问 

定义:把一个函数的返回值作为另外一个函数的参数。

下面来看实验操作

         当我们需要计算数组的长度时,需要创建一个变量去接收strlen的返回值,然后输出变量才能知道数组的长度,有些费时间,费空间。其实有一种更方便快捷的访问方法--链式访问。如下图所示。

 链式访问其实就是将两个或多个结构像链子一样关联起来,A可以通过链子的方向找到B的所在地,B也可以通过链子反向找到A。如下图所示。 

strlen函数经过计算后,会返回一个整形数值,返回的值作为printf函数的参数进行输出。

int main() {
	printf("%d", printf("%d", printf("%d", 99)));
	return 0;
}

请各位来做一下这道题,计算一下最终结果。

代码讲解:首先这道题采用了三个printf函数,printf函数也有相应的返回值,而它的返回值就是输出的字符数量,返回值是是输出的字符数量,包括数字,字母,标点符号,空格等。

通过这个知识点,我们可以从里到外进行分步计算。

        首先最里面的printf输出的是99,99是两位数,那么返回的就是2个字节,将返回的值作为第二个printf的参数,会输出2,“2” 是1位数,所以会返回1个字节,1会作为最后一个printf函数的参数,输出1。所以最终的结果就是9921。各位想必已经了解了链式访问的基本方法了吧。

三.函数的定义和声明

1 函数声明:

a. 告诉编译器有一个函数叫什么,参数是什么,返回类型是什么。  但是具体是不是存在,函数声明决定不了。

b. 函数的声明一般出现在函数的使用之前。要满足先声明后使用。

c. 函数的声明一般要放在头文件中的。

2 函数定义:

函数的定义是指函数的具体实现,交待函数的功能实现。

        首先来看函数声明,声明通过字面意思就可以知道他是用来向程序宣布它的存在的。

        就好比一个男生和喜欢的女孩恋爱了,男生向微信朋友圈官宣了她名草有主了hhh,这也就是间接告诉了朋友们他有女朋友了,她女朋友叫啥长啥样子,这样朋友们脑袋中也就会get到这个信息,到时候见到他俩在一起就不会感到诧异和惊奇了。这么说大家应该懂了声明的意义了。就是为了让程序知道它的存在。

int Add(int, int);//函数声明
int main() {
		int a = 10;
	    int b = 20;
	    int sum = Add(a,b);
	    printf("%d\n", sum);
		return 0;
}
//函数定义
int Add(int x, int y) {
	return x + y;
}

         当声明后,程序会进行记忆,在后面遇到Add函数后,会先跳过这个代码,继续往下执行,直到遇到此函数的操作步骤才会返回来执行。所以满足先声明后使用。很重要!

接下来讲一讲函数定义。

        就如同刚才的概念一样,函数得有一个设计思路,你想让变量或者代码生成一个什么样的内容,取决于它是经过怎样定义而成的。A公司想计算两个数的乘积,但他不会算,他花钱雇了一个程序员B帮他计算,B通过自己的方法算出来了将最终将结果交给了A公司,完成了交易,然后B就走了。当A若继续想计算另外几个值的乘积,就又可以找B做交易--程序可以进行多次调用函数实现        计算。

        大家需要注意的是:当要写的代码数量较少时,可以将函数声明定义放在一块,但以后在公司就业时,参与了一个代码量相当庞大的项目时,需要将函数声明与函数定义分开去书写。

        举个例子。当一个项目只有一个test.c文件时,这时有100个程序猿参与完成它,总不可能等A去写完,再由B,C,D,E....一个个的轮流书写吧,那得写到何年何月才能写完?项目是需要多人进行同时协作才能完成的,比如写一个计算器项目:是需要程序员A去完成加法的声明(放在test.h头文件)和加法的功能实现(test.c),B完成减法的声明与实现......如下图

         当他们完成了各自的任务,最后把每个人的代码拼接起来就可以完成一个完整的计算器项目了。这叫做模块化管理,分配任务,协同进行。

好了以上就是关于函数(4)的讲解了,希望对你们有所帮助!

                                                                                                                        仍是未完,待续h! 


Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐