函数看完这篇就登峰造极第二部分 必看

大家好,这篇文章我们来讲函数的调用和声明,这里需要你对第一部分的形参和实参有较好的理解。不然会出现临时卡壳的情况。好了,话不多说,我们直接开始。

嵌套调用

#include <stdio.h>
void new_line()
{
 printf("hehe\n");
}
void three_line()
{
    int i = 0;
 for(i=0; i<3; i++)
   {
        new_line();
   }
}
int main()
{
 three_line();
 return 0;
}

这里给大家放了一个嵌套函数的具体使用

很简单,就是在使用three_line这个函数的时候再去调用了一个新的函数,有人可能就会问了,那这不是和链式访问一样吗,一个函数执行完之后又去执行另外一个函数。那这两者的区别在哪呢?别着急,我们想想高数里面的链式法则的求导,或者是,再简单一点,复合函数的求导,是不是一层一层的像剥洋葱一样地计算?所以二者其实没有很大区别,如果你要硬让我给你一个结论的话,就像代码嵌套函数里面所提及的那样。我做嵌套函数这个动作的时候,是让我的下一步利用函数去执行,也就是说接下去我做着可能嫌麻烦,那我直接调用一个函数来执行。而链式访问,则是把我这个函数的计算结果作为下一个函数的参数去计算,调用一次函数就已经完成了一次计算量。

好了,不做深究,我们对知识要搞懂,但是也不能钻牛角尖,主要还是学技术学会怎么用为什么要这么用

#include <stdio.h>
#include <string.h>
int main()
{
    char arr[20] = "hello";
 int ret = strlen(strcat(arr,"bit"));
 printf("%d\n", ret);
 return 0;
}

这里也给大家举一个例子,这里的两个库函数,希望大家自己去官网了解作用,str开头的库函数还是很常用的,可以积累。

#include <stdio.h>
int main()
{
    printf("%d", printf("%d", printf("%d", 43)));
    
    return 0;
}

这里给大家出一道链式访问的题目,求这个打印的结果是什么?

现在请允许我占用一点篇幅,挥挥衣袖先行保密,留给大家一点冷静思考的空间。

如果想不到就往下看,再带着答案去想想看。

答案是:4321

是不是摸不着头脑,是的,这题就是来唤醒你的。实际上,printf打印的是屏幕上字符的个数。所以当第一个43打印完后,printf就输出的是字符了。所以我们有时候真的要再去看看库函数的用法,不然出错了也是一点头绪没有。虽然现实中也不大会出错,但是了解底层逻辑,一定会让你更加通透。

不知不觉又写了一千字,本来该结束的,但是讲的干货量和我预期的内容量实在差太多了。加班!

好了我们再来看这个函数的声明与定义:

函数为什么要声明,写出来不就代表有这个函数了吗?

函数声明
1. 是为了告诉编译器有一个函数叫什么,参数是什么,返回类型是什么。

但是具体是不是存在,无关紧要。
2. 函数的声明一般出现在函数的使用之前。

要满足先声明后使用。
3. 函数的声明一般要放在头文件中的。
函数定义
函数的定义是指函数的具体实现,交待函数的功能实现。

这里一样给大家摆一下具体的代码

test.h的内容 放置函数的声明
#ifndef __TEST_H__
#define __TEST_H__

int Add(int x, int y);
#endif //__TEST_H__
test.c的内容 放置函数的实现
#include "test.h"
//函数Add的实现
int Add(int x, int y)
{
 return x+y;
}

这里的.h代表的是我们编译器里面的头文件,.c文件则代表我们的源文件,也就是说当我们写好一个函数的时候,直接像代码中所显示的那样引用一下就好了。很方便是吧,但是这里就有人可能会问,为什么要写成两个文件,都写在.c文件里不就好了嘛。是这样的,这就是我在开篇说的团队的协作性,因为在实际工作中,一个项目的开发是几十万行代码甚至百万行代码,所以你的团队来做这个项目,肯定是模块化开发的,那么你的函数放在头文件里面别人就可以用了,同样你也可以用别人的代码。具体格式后面写扫雷再说。

讲到这里再插一嘴,我们讲局部变量和全局变量哪个好,肯定是局部变量好,但是相对的难度更大,对于作用域要十分清晰,所以很多人写代码啪一下把全局变量写在那就过了,但是对于团队的项目呢,你的全局变量,一旦代码一改,或者名称有重复呢,当然更深层的还是函数栈帧模块,全局变量的空间的占用,简单一说,就是你的全局变量可能会占用空间从而影响到别人的代码。

所以扎实的功底才是写出好代码的关键!!!

还有一个,自定义函数的返回类型不定义的时候默认返回的是int类型的。所以自定义函数一定要一板一眼写好每个部分。

好了写了将近两千字了,能看到这的你已经很棒了,继续加油吧。努力学习去探索所谓人工智能,站在人类科技之巅!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值