1、函数的声明
// 返回值 函数名称(参数)//return 返回值unsigned long Fibonacci(unsigned n) {if (n > 2)return Fibonacci(n - 1) + Fibonacci(n - 2);elsereturn 1;}
2、main 函数
C 语言规定,main()是程序的入口函数,即所有的程序一定要包含一个main()函数。
int main(void) {printf("Hello World\n");return 0;//表示函数结束运行 如果main()里面省略return 0这一行,编译器会自动加上}
3、参数的传值引用
/*** @brief 交换参数值** @param a* @param b*/void swap(int a, int b){//这里的参数没有传递的是值,不是指针引用//影响不了原始变量int t = b;b = a;a = t;}/*** @brief 交换参数值** @param a* @param b*/void swap2(int *a, int *b){//通过传入变量x和y的地址,函数内部就可以直接操作该地址,//从而实现交换两个变量的值。int t = *b;*b = *a;*a = t;}int main(int argc, char const *argv[]){int a = 1;int b = 2;swap(a, b);printf("swap a=%d, b=%d", a, b);swap2(&a, &b);printf("swap2 a=%d, b=%d", a, b);return 0;}
4、函数指针
- 赋值方式 ```c void print(int a) { printf(“%d\n”, a); }
//返回值 (指针名称)(参数类型) = void (*print_ptr)(int) = &print;
C 语言还规定,函数名本身就是指向函数代码的指针,通过函数名就能获取函数地址。也就是说,print 和 &print是一回事。- 函数作为参数传递```javaint myfunc(int a){return a+1;}int compute(int (*myfunc)(int), int a, int b){return myfunc(a) + b;}int main(int argc, char const *argv[]){int a = 1;int b = 2;printf("函数指针=== %d", compute(&myfunc,a,b));return 0;}//输出 4
5、函数原型
函数必须先声明,后使用。由于程序总是先运行main()函数,导致所有其他函数都必须在main()函数之前声明。
C 语言提供的解决方法是,只要在程序开头处给出函数原型,函数就可以先使用、后声明。
#include <stdio.h>//声明函数原型int twice(int);int main(int argc, char const *argv[]){printf("函数原型==%d",twice(1));return 0;}//使用函数原型后,可以声明在 main方法后int twice(int num) {return 2 * num;}
6、exit()
exit()函数用来终止整个程序的运行。一旦执行到该函数,程序就会立即结束。该函数的原型定义在头文件stdlib.h里面。
7、extern 说明符
对于多文件的项目,源码文件会用到其他文件声明的函数。这时,当前文件里面,需要给出外部函数的原型,并用extern说明该函数的定义来自其他文件。
extern int foo(int arg1, char arg2);// 相当于 int foo(int arg1, char arg2);int main(void) {int a = foo(2, 3);// ...return 0;}
8、static 说明符
static用于函数内部声明变量时,表示该变量只需要初始化一次,不需要在每次调用时都进行初始化。
9、const 说明符
函数参数里面的const说明符,表示函数内部不得修改该参数变量。
10、可变参数
// ... 表示可变参数int printf(const char* format, ...);
