目录
函数
库函数
自定义函数
函数的定义与声明
函数定义
函数的声明
函数的调用
参数
传值调用
传址调用
链式访问
递归
函数
之前提到了函数的便利性,接下来再讲讲如何自定义函数,如何调用(库)函数,以及递归,这都是函数重要的内容。
早期C语言没有库函数,为了提高代码编写效率,就把一些常用功能集成库,由C语言直接提供。
使用库函数,必须包含 #include 对应的头文件。
char *strcpy( char *strDestination, const char *strSource )的使用范例
(将strSource 复制到strDestination,包含在string.h 头文件中)
#define _CRT_SECURE_NO_WARNINGS
#include
#include
int main()
{
char a[] = "I am A";
char b[] = "I am B";
strcpy(a, b);
printf("%s", a);
}
运行结果
C语言常用库函数: C语言库函数官方文档
- IO函数
- 字符串 *** 作函数
- 字符 *** 作函数
- 内存 *** 作函数
- 时间/日期函数
- 数学函数
- 其他库函数
函数构成:
返回类型+函数名+(函数参数)+{函数主体}
返回类型:函数执行完返回值的类型,如int型,flaot型等。
其中void 是空返回,即函数执行完执行体,不返回任何值。
函数名:确定返回类型后就是确定函数名,建议起识别性高的名字,尽量不起拼音。
不能用关键字作函数名。
函数参数:这里是形式参数,根据函数功能需要,决定需要什么类型的,若干个函数。
函数主体:用来完成函数功能的代码。
#define _CRT_SECURE_NO_WARNINGS
#include
void print() {
printf("我是打印函数");
}
int main()
{
print();
}
函数可以嵌套调用但是不能嵌套定义。
由于程序是一条一条从 上至下,从左往右 执行。
当函数定义在main函数后面时,编译器会找不到未定义的print函数,因此我们可以通过声明函数的方式,让程序一开始就找到函数,知道这个函数的存在,当main函数调用这个函数的时候再返回去找函数具体的内容。
声明格式:
返回类型+函数名+(函数参数);
没错,将函数主体去掉,前面部分照写在main函数前即可。
#define _CRT_SECURE_NO_WARNINGS
#include
void print();
int main()
{
print();
}
void print() {
printf("我是打印函数");
}
函数的调用
使用 函数名+(函数参数) 即可调用函数。
参数有实际参数,形式参数 两种。
实际参数就是调用函数时传给函数的实际参数,函数在被调用时,会开辟形参的内存空间,并把实参的值复制给形参,因此无论在函数体内如何 *** 作形参,都不会改变实参的值。
实参的副本传入函数,最终改变不了实参的值。
#define _CRT_SECURE_NO_WARNINGS
#include
void exchange(int a ,int b) {
int tmp = a;
a = b;
b = tmp;
}
int main() {
int c = 1, d = 2;
exchange(c, d);
printf("%d %d", c, d);
}
传址调用运行结果
传入变量的地址,改变指针指向的值,从而改变真正的值。
#define _CRT_SECURE_NO_WARNINGS
#include
void exchange(int *a ,int *b) {
int tmp = *a;
*a = *b;
*b = tmp;
}
int main() {
int c = 1, d = 2;
int *p1 = &c;
int *p2 = &d;
exchange(p1, p2);
printf("%d %d", c, d);
}
链式访问运行结果
链式访问是在函数参数里调用函数。
递归就是函数内嵌套地调用函数,下面是几个用到递归的范例。
利用递归实现阶乘的函数。
#include
//阶乘函数
int Func(int x) {
if (x == 1) return 1;//递归重要的一点,终止条件
return Func(x - 1) * x;
}
int main() {
printf("%d", Func(3));
return 0;
}
计算字符串长度
利用递归计算字符串长度
#include
int strlen(char* arr) {
if (*arr != '\0')
return 1 + strlen(arr + 1);
return 0;
}
int main() {
char string1[] = "My lenth is:";
char string2[] = "我长";
char string3[] = "M";
int len1 = strlen(string1);
int len2 = strlen(string2);
int len3 = strlen(string3);
printf("%d\n%d\n%d", len1,len2,len3);
}
运行结果
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)