一.前言
本章为个人所学所理解的C语言中函数篇的相关知识,定有不足,还望大家多多指教。
二.什么是函数?
函数是一段可以重复使用的代码,用来独立地完成某个功能。
三.函数的分类:
函数可以分为库函数和自定义函数。
1.库函数
在说库函数之前,先给大家推荐一个网站,这个网站可以搜索到所有C语言中的库函数,它包含了这些函数的信息和如何使用的场景介绍,下面是它的网址:
[cplusplus]https://legacy.cplusplus.com/
介绍:C语言在发布时已经为我们封装好了很多函数,它们被分门别类地放到了不同的头文件中(暂时先这样认为),使用这些函数时引入对应的头文件即可。这些函数是已经被编写的且效率极高,因此,为了某些功能的实现,引入库函数是首选。
比如:
strlen strcpy memcet
1.1 strlen的作用为求字符串长度
这里放段代码展示其作用
#include <stdio.h> #include <string.h> //引入包含strlen函数的头文件 int main() { char arr[] = "hello"; int ret = strlen(arr); // 将求出的字符串返回值用整型变量接受 printf("%d\n", ret); return 0; }
下面是运行结果
很明显strlen求出的值的确是“hello”的长度值。
1.2strcpy与memset函数的使用
可以说strcpy与memset有相似之处,在某些场景,这两个函数都能将其实现
1.2.1strcpy
通俗来说,strcpy是将一个字符串里的内容拷贝到另一个字符串里,值得注意的是,当一个字符串拷贝到另一个字符串里时,其第一个字符串里的字符串结束标志 “\0" 也被拷贝进第二个字符串里,这时第二个字符串里原有的内容就会被两个“\0"包围,从而打印第二个字符串时为第一个字符串的内容。
代码实现:
#include <stdio.h> #include <string.h> int main() { char arr1[] = "******"; char arr2[] = "abc"; strcpy(arr1, arr2); /// 将arr2打印到目的地arr1中 printf("%s\n", arr1); return 0; }
运行结果
1.2.2 memset
C 库函数 void *memset(void *ptr, int value, size_t num) 复制字符 value(一个无符号字符)到参数 ptr 所指向的字符串的前 num 个字符。
代码实现:
#include <stdio.h> #include <string.h> // 用 memset 对应头文件 int main() { char arr1[] = "########"; memset(arr1, '*', 4); / 将4个‘*’字符复制到arr1当中 printf("%s\n", arr1); return 0; }
运行结果:
库函数还有很多,这里只是举的几个例子,如果要多的了解,可以访问上面给的网站。
2. 自定义函数
自定义函数是自己实现的为了完成整个程序某个功能所设置的,他能多次调用,服务于整个程序,并且自定义函数各模块之间尽量功能独立。
2.1 为什么要有自定义函数?
大家想想,如果所有的功能库函数都为你提供了,那还关程序员啥事?
自定义函数在某种程度上更高于库函数,他能体现一个程序员的水平如何。
2.2 自定义函数的组成与例子
ret_type function_name(para, *) { / 函数体 } ret_type //返回类型 function_name // 函数名 para // 函数参数 * // 另一个参数 ,待定义
例如:1.(计算两个整型变量的和)(Add)
#include <stdio.h> // 这里返回值为整型 int Add(int a, int b) /// 用两个整型值接受传来的 a b ,这里可以重名 { return (a + b); } int main() { int a = 10; int b = 20; // ret 接受返回值 int ret = Add(a, b); // 传参 求和 printf("%d\n", ret); // 打印和值 return 0; }
运行结果:
例 2. 求一个整数的位数
#include <stdio.h> int fun(int n) { int count = 0; while (n > 0) { n = n / 10; count++; } return count; } int main() { int n = 0; scanf("%d", &n); int ret = fun(n); printf("%d\n", ret); return 0; }
运行结果:
这里函数名最好是取与功能相关的名字,这样更具可读性。
2.3 void说明:
如果一个函数的返回类型为void,表示这个函数没有返回值,一般这样使用可能是为了打印某个东西,也可能是将某个整型变量或者数组元素改变。
例如:这里将数组元素改变。
#include <stdio.h> void ecg(int arr[], int sz) { int i = 0; for (i = 0; i < sz; i++) { arr[i] = 0; } } int main() { int arr[3] = { 1,2,3 }; int sz = sizeof(arr) / sizeof(arr[0]); // 求数组 长度/元素个数 ecg(arr, sz); 这里我们将arr数组内容全改为0 int i = 0; for (i = 0; i < sz; i++) { printf("%d ", arr[i]); } return 0; }
运行结果:
这里我们将整型数组的内容全部改为 0 。