目录
前言
在c语言中函数主要分为两种,一是自带的库函数,二是我们自定义的函数,下面就分别给大家介绍一下。
库函数
像大家熟悉的printf()函数,scanf()函数就是我们c语言自带的函数,我们在用它们的时候只需要在#include包含一下所需的头文件就行了,就像我们最常用的stdio.h就是我们printf()和scanf()函数所需要申明的头文件,下面再给大家介绍两个库函数,教大家怎么去学习以及使用库函数。
如何学习需要的库函数
这里给大家分享两个链接,关于库函数的学习的网站。
cplusplus.com - The C++ Resources Network
下面我们就用第一个网站给大家演示一下库函数的学习。
我们在上面的search栏里搜索一个memset的库函数,然后我们查看搜索结果,
上面是关于函数各个参数以及返回值等的介绍,虽然是英文但大多是简单的词汇,可以学着去理解学习,当然也可以通过百度翻译等直接给翻译过来,然后我们接着看下面
下面就是大家最喜欢看的部分,非常直观的给出一个例子,包括头文件的引用,以及输出结果都有。
然后下面我自己操作一下,给大家看看我的代码:
#include<stdio.h>
#include<string.h>
int main()
{
char str[] = "hello word";
memset(str, '*', 5);
printf("%s", str);
return 0;
}
运行结果
对于库函数建议大家就是简单了解,然后你需要用到某个函数的时候再去学。
自定义函数
函数的参数
实际参数(实参)
形式参数(形参)
下面用一个例子让大家理解:
void swap(int x, int y)//这里的x,y为形参
{
int swp = 0;
swp = x;
x = y;
y = swp;
}
int main()
{
int a = 10, b = 20;
printf("%d,%d\n", a, b);
swap(a, b);//a,b为实参
printf("%d,%d", a, b);
}
函数的调用
我们先来看一下上面代码的运行结果
明明用了swap函数对其进行互换但结果却没有发生改变,这是什么原因呢?
这就是我们接下来要说的内容,函数的传值调用和传址调用。
传值调用
![](https://img-blog.csdnimg.cn/ed039b5745934c77b18e9c920054b817.png)
我们可以看到a与x的地址不一样但值一样,所以我们交换的仅仅是x,y而非a,b。
传址调用
我们看这样一段代码:
void swap1(int* x, int* y)
{
int tep = 0;
tep = *x;
*x = *y;
*y = tep;
}
int main()
{
int a = 10, b = 20;
printf("%d %d\n", a, b);
swap1(&a, &b);
printf("%d %d", a, b);
return 0;
}
运行结果
我们可以将a,b的地址给传递给x,y然后我们直接操a,b将它们的值互换,以此便解决了问题。
函数的嵌套调用和链式访问
嵌套调用
#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; }
链式访问
将函数的返回值作为参数调用
int main()
{
printf("%d", printf("%d", printf("%d", 43)));
//注:printf函数的返回值是打印在屏幕上字符的个数
return 0;
}
函数的声明和定义
函数声明
函数的定义
函数的定义是指函数的具体实现,交待函数的功能实现。
![](https://img-blog.csdnimg.cn/b36fe11f9f7d4a5db8e2c49d5456cfae.png)