今天是跟着b站bit鹏哥学习C语言的第13天;今天主要是函数,废话不多说直接上我整理的干货;
函数是什么?
数学中我们常见到函数的概念。但是你了解C语言中的函数吗?维基百科中对函数的定义:子程序
在计算机科学中,子程序(语:Subroutine,procedure,function,routine,method,subprogram,callable unit ),是一个大型程序中的某部分代码,由一个或多个语句块组成。它负责完成某项特定任务,而且相较于其他代码,具备相对的独立性。
一般会有输入参数并有返回值,提供对过程的封装和细节的隐藏。这些代码通常被集成为软件库。
C语言中的函数分类:
1:库函数
2:自定应函数
一,库函数
为什么会有库函数?
1.我们知道在我们学习C语言编程的时候,总是在一个代码编写完成之后迫不及待的想知道结果,想把这个结果打印到我们的屏幕上看看。这个时候我们会频繁的使用一个功能:将信息按照一定的格式打印到屏幕上(printf)。
2在编程的过程中我们会频繁的做一些字符串的拷贝工作(strcpy)。
3.在编程是我们也计算,总是会计算n的k次方这样的运算(pow)。
像上面我们描述的基础功能,它们不是业务性的代码。我们在开发的过程中每个程序员都可能用的到为了支持可移植性和提高程序的效率,所以C语言的基础库中提供了一系列类似的库函数,方便程序员进行软件开发
那怎样学习库函数呢?(不许用全部学习,只需要会查询就好)
1:MSDN
2:http://www.cplusplus.com
3:http://en.cppreference.com
C语言常用的库函数都有:
1:IO函数(输入 输出函数,例如:pirntf scanf putchar)
2:字符串操作函数(例如:strcyp strlen)、
3:字符操作函数(例如:转换字符大小写toupper)
4:内存操作函数(例如:memcpy mrmcmp memset)
5:时间/日期函数(例如:time)
6:数学函数(例如:开平方sqrt)
7:其他库函数
我们用strcpy和memset举例
例(srtrcpy):
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> int main() { char arr1[20] = { 0 }; char arr2[] = "hello bit"; strcpy(arr1, arr2); printf("%s", arr1); return 0; }
strcpy函数就是将一个数组中的所有元素拷贝到另一个数组;
例(memsrt):
#include <stdio.h> #include <string.h> int main() { char arr1[] = "hello bit"; memset(arr1, 'x', 5); printf("%s ", arr1); return 0; }
memse函数就是将一个数组中的前几个指定元素换成指定元素
二,自定义函数
如果库函数能干所有的事情,那还要程序员干啥?
自定义函数和库函数一样,有函数名,返回类型,参数;不一样样的是需要我们程序员自己设定;
自定义函数的组成:
int swap(int x, int y) { return 0; }
int 为函数的返回类型
swap 为函数名
int x, int y 为函数的参数
练习:用函数交换两个数;
#include <stdio.h> void swap(int* pa, int* pb) { int t = *pa; *pa = *pb; *pb = t; } #include <stdio.h> int main () { int a = 10; int b = 20; swap(&a, &b); printf("%d %d", a, b); return 0; }
那我们用这个联系深入了解下函数
void swap(int* pa, int* pb)//函数的定义 这里的*pa和*pb为函数的形式参数 { // int t = *pa; // *pa = *pb; //函数体 *pb = t; // } // #include <stdio.h> int main () { int a = 10; int b = 20; swap(&a, &b);//函数的调用 这里的&a和&b为函数的实际参数 &代表取地址像这样为传址调用 //swap(a,b);//像这样为传值调用,但在这个练习中这样写是错的 printf("%d %d", a, b); return 0; } //传值只是将实参拷贝到形参,形参的改变不会对实参造成影响 //传址可以让主函数和外边的函数联系起来形参的改变会影响实参的改变 //调用swap()函数时括号里可以是整形,字符型,表达式,也可以是函数
函数的声明和定义
函数声明:
1.告诉编译器有一个函数叫什么,参数是什么,返回类型是什么。但是具体是不是存在,无关02.函数的声明一般出现在函数的使用之前。要满足先声明后使用
紧要。
3.函数的声明一般要放在头文件中的。
函数定义:
函数的定义是指函数的具体实现,交待函数的功能实现
int main() { int swap(int , int );//函数的声明:是一个返回值为int的函数 int a = 10; int b = 20; int add=swap(a, b); printf("%d ", add); return 0; } //函数的定义 int swap(int x, int y) { int z = 0; z = x + y; return z; }
注!!!:如果一个函数不写返回类型默认为int型
函数的嵌套
// 函数的嵌套 int test1() { printf("haha\n"); return 0; } int test() { printf("hehe\n"); test1(); return 0; } int main() { test(); return 0; } int swap(int x, int y) { return 0; }
注!!!:函数可以嵌套使用但是不可以嵌套定义
函数的链式访问
int main() { printf("%d",printf("%d", printf("%d", 43)));函数的链式访问 return 0; }
注!!!:printf函数返回的是打印在屏幕上的字符的个数