点击上方"蓝字"关注我们
01、函数声明和定义
int main() {
printf("Hello World!");
return 0;
}
函数由两部分组成
void myFunction() { // 声明 declaration
// 函数体(要执行的代码)(definition)
}
Declaration 声明函数名称、返回类型和参数 (如果有)
Definition 函数体 (要执行的代码)
// 函数声明
void myFunction();
// 主要方法
int main() {
myFunction(); // --> 调用函数
return 0;
}
void myFunction() {// 函数定义
printf("晚上好!");
}
02、调用函数
// 创建函数
void myFunction() {
printf("晚上好!");
}
int main() {
myFunction(); // 调用函数
myFunction(); // 可以被多次调用
return 0;
}
// 输出 -> "晚上好!"
// 输出 -> "晚上好!"
03、函数参数
void myFunction(char name[]) {
printf("Hello %s\n", name);
}
int main() {
myFunction("Liam");
myFunction("Jenny");
return 0;
}
// Hello Liam
// Hello Jenny
04、多个参数
void myFunction(char name[], int age) {
printf("你好 %s 你 %d 岁了。\n",name,age);
}
int main() {
myFunction("Liam", 3);
myFunction("Jenny", 14);
return 0;
}
// 你好 Liam 你 3 岁了。
// 你好 Jenny 你 14 岁了。
05、返回值
int myFunction(int x) {
return 5 + x;
}
int main() {
printf("结果: %d", myFunction(3));
return 0;
}
// 输出 8 (5 + 3)
两个参数
int myFunction(int x, int y) {
return x + y;
}
int main() {
printf("结果: %d", myFunction(5, 3));
// 将结果存储在变量中
int result = myFunction(5, 3);
printf("结果 = %d", result);
return 0;
}
// 结果: 8 (5 + 3)
// 结果 = 8 (5 + 3)
06、递归示例
int sum(int k);
int main() {
int result = sum(10);
printf("%d", result);
return 0;
}
int sum(int k) {
if (k > 0) {
return k + sum(k - 1);
} else {
return 0;
}
}
07、数学函数
#include <math.h>
printf("%f", sqrt(16)); // 平方根
printf("%f", ceil(1.4)); // 四舍五入 (入)
printf("%f", floor(1.4)); // 四舍五入 (舍)
printf("%f", pow(4, 3)); // x(4)的y(3)次方
abs(x)
绝对值acos(x)
反余弦值asin(x)
反正弦值atan(x)
反正切cbrt(x)
立方根cos(x)
余弦exp(x)
Ex 的值sin(x)
x 的正弦值tan(x)
角度的正切
总结
知识回顾
入门C语言只需一个星期(星期一) |
入门C语言只需一个星期(星期二) |
入门C语言只需一个星期(星期三) |
入门C语言只需一个星期(星期四) |
#include<stdio.h>
// 静态函数(static function)
static void static_func() {
printf("这是一个静态函数。
");
}
// 常量函数(const function)
const void const_func() {
printf("这是一个常量函数。
");
}
// 内联函数(inline function)
inline void inline_func() {
printf("这是一个内联函数。
");
}
int main() {
static_func();
const_func();
inline_func();
return 0;
}
1. 静态函数(static function):使用 static
关键字修饰的函数,其作用范围仅限于定义它的源文件。这意味着在其他源文件中无法访问这个函数。静态函数在内存中只有一份副本,不会被多个源文件中的同名函数所干扰。
2. 常量函数(const function):使用 const
关键字修饰的函数,表示该函数不会修改任何外部变量的值。这有助于提高代码的可读性和安全性。但是,这并不意味着函数内部不能调用其他非const函数。
3. 内联函数(inline function):使用 inline
关键字修饰的函数,编译器会尽量将函数调用替换为函数体的代码,以减少函数调用的开销。内联函数通常用于简单的函数,以提高程序的执行效率。需要注意的是,编译器并不一定会将内联函数真正地内联,它会根据实际情况决定是否进行内联优化。
### 指针函数举例
假设我们有一个函数 `add`,它接受两个整数作为参数并返回它们的和。我们可以定义一个指针函数 `create_add_func`,它返回一个指向 `add` 函数的指针。这样,我们就可以在运行时动态地创建指向 `add` 函数的指针。
```c
#include<iostream>
int add(int a, int b) {
return a + b;
}
// 定义一个指针函数,它返回一个指向 add 函数的指针
typedef int (*AddFuncPtr)(int, int);
AddFuncPtr create_add_func() {
return add;
}
int main() {
AddFuncPtr add_func_ptr = create_add_func();
int result = add_func_ptr(3, 4);
std::cout << "Result: "<< result<< std::endl; // 输出:Result: 7
return 0;
}
```
在上面的代码中,我们首先定义了一个名为 `add` 的函数,它接受两个整数作为参数并返回它们的和。然后,我们定义了一个名为 `create_add_func` 的指针函数,它返回一个指向 `add` 函数的指针。在 `main` 函数中,我们调用 `create_add_func` 函数来获取指向 `add` 函数的指针,并使用该指针调用 `add` 函数来计算 3 和 4 的和。
### 函数指针举例
假设我们有一个函数 `print_sum`,它接受两个整数作为参数并打印它们的和。我们可以定义一个函数指针变量 `sum_func`,并将 `print_sum` 函数的地址赋值给它。这样,我们就可以通过 `sum_func` 调用 `print_sum` 函数。
```c
#include<iostream>
void print_sum(int a, int b) {
std::cout << a << " + " << b << " = " << a + b<< std::endl;
}
// 定义一个函数指针类型,它指向一个接受两个整数并打印它们的和的函数
typedef void (*SumFuncPtr)(int, int);
int main() {
SumFuncPtr sum_func = print_sum;
sum_func(3, 4); // 输出:3 + 4 = 7
return 0;
}
```
在上面的代码中,我们首先定义了一个名为 `print_sum` 的函数,它接受两个整数作为参数并打印它们的和。然后,我们定义了一个名为 `sum_func` 的函数指针变量,并将 `print_sum` 函数的地址赋值给它。在 `main` 函数中,我们通过 `sum_func` 调用 `print_sum` 函数来打印 3 和 4 的和。
故我在
点击下方卡片 关注我
↓↓↓
Qt历险记
一名技术分享师,分享方向:->Qt(C/C++、linux、STM32、MySql/Sqlite3、TCP/UDP),设计方面->Ai、PS、visio、AD、Protues。