C语言基础系列—函数
小伙伴们都学到函数了吗?今天的基础系类,我们一起来了解了解函数的一些内容吧!
目录
1,定义:
首先当然是先上定义: C语言函数是一种函数,用来编译C语言,一般包括字符库函数,数学函数,目录函数,进程函数,诊断函数,操作函数等。
具体大家想看的话,可以去看看:
但是这里我给出维基百科中的定义:
在计算机科学与技术中,子程序是一个大型程序中的某部分代码,由一个或多个语句块组成,它负责完成某项特定任务,而相较于其他代码,具备相对独立性。
一般会有输入参数,并有返回值,提供对过程的封装和细节的隐藏。这些代码通常被集成为软件库。
2, 分 类:
包括,库函数和自定义函数。
像我们常使用的一些函数如printf,scanf都是一些库函数,而我们自己写的一些函数叫自定义函数
库函数是一些我们经常使用的函数,被c语言提供。而我们自己设计的函数则更能给我们发挥的空间,让我们更便利地解决问题,开发。
很多时候我们写一些代码实现功能时,都会封装成函数,这样可移植性高,当其他人想使用的,就可以直接拿去使用。(因为这块代码封装成函数时,会尽量做到只处理一个功能,那么就可以直接让其他人拿去使用)
函数一般包括,函数返回类型,函数名,函数参数,函数体等。
3,函数的参数
函数的参数包括实际参数和形式参数。
实际参数,是真实传递给函数的参数,可以是常量,变量,表达式,函数等。无论实参是何种类型,他们的都必须有确定的值。
形式参数,是指函数名后面括号中的变量,不调用函数时是不开辟空间的,只有在被函数调用的过程中,才会真实在内存中开辟空间,形参只在函数中有效。
4,函数的调用
1,传值调用
这个只是将实参的值传给形参,然后在函数中对形参进行操作,对实参没有影响。
重点来了:形参相当于实参的一份临时拷贝。
2,传址调用
这类调用会将实参的地址交给形参,在配合解引用符*的使用,会让形参可以影响到实参
最简单的一个例子就是:调换两个变量的值
像这类传值调用,是没有办法交换变量的值的:
#include<stdio.h>
void change(int i, int j)
{
int tmp = 0;
tmp = i;
i = j;
j = tmp;
}
int main()
{
int i = 10;
int j = 5;
change(i, j);
printf("%d %d", i, j);
return 0;
}
而使用传址调用会涉及到后面指针的知识,但是是可以交换的。
#include<stdio.h>
void change(int* i, int* j)
{
int tmp = 0;
tmp = *i;
*i = *j;
*j = tmp;
}
int main()
{
int i = 10;
int j = 5;
change(&i, &j);
printf("%d %d", i, j);
return 0;
}
这就是传值和传址的区别了。
3,函数的嵌套调用和链式访问
嵌套调用是,在函数中再次调用函数(递归就是用这个原理)
#include<stdio.h>
void print2()
{
printf("hello");
}
void print1()
{
print2();
}
int main()
{
print1();
return 0;
}
链式访问是值,用一个函数的返回值作为另一个函数的参数
#include<stdio.h>
int main()
{
printf("%d",printf("hello\n"));
return 0;
}
这里会打印hello和6,就printf的函数返回值作为另一个printf函数的参数。
5,函数声明,定义
1,函数的声明
1,就是告诉编译器,有一个函数叫什么,参数是什么,返回类型是什么。但是具体是不是存在,无关紧要。
2,函数的声明一般出现在函数的使用之前。要满足先声明后使用。。
3,函数的声明一般放在头文件中。
2,函数的定义
函数的定义是指函数的具体实现,交待函数功能的实现。
具体可以看看下面的代码
#include<stdio.h>
int main()
{
void print1();//h函数声明
void print2();
print1();
return 0;
}
void print2()//函数定义
{
printf("hello");
}
void print1()
{
print2();
}
如果将函数声明删去,程序会报错,大家可以去试试。
函数递归的部分内容多,有一些很经典的题目,在下个一篇博客再和大家分享吧。今天这篇博客就到这里结束啦。码字不易,看到这里不妨给博主点个关注,点个赞吧。我会坚持更新的。
如有错误,请联系修改。有什么建议,或者大家想看些其他什么东西,也可以在评论区告诉博主,虽然博主不一定会,但是可以学。学完之后在和大家分享,交流,共同进步。
参考资料:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了