1. 函数与递归
1.1 函数概述
函数是C语言中实现代码模块化的基础。它允许我们将一段代码封装起来,以便在不同的地方重复使用。
// 函数定义
void myFunction() {
// 函数体
}
// 函数调用
myFunction();
1.2 递归函数
递归函数是一种特殊的函数,它在其函数体内直接或间接地调用自身。
// 递归函数计算阶乘
int factorial(int n) {
if (n == 0)
return 1;
else
return n * factorial(n - 1);
}
1.3 实战应用:计算斐波那契数列
斐波那契数列是一个著名的数列,其递推公式为:F(n) = F(n-1) + F(n-2)。
// 递归函数计算斐波那契数列
int fibonacci(int n) {
if (n <= 1)
return n;
else
return fibonacci(n - 1) + fibonacci(n - 2);
}
2. 指针与数组
2.1 指针概述
指针是C语言中的一种特殊数据类型,它存储了变量的内存地址。
int a = 10;
int *ptr = &a; // ptr指向变量a的地址
2.2 指针与数组
数组名在表达式中相当于指向数组首元素的指针。
int arr[5] = {1, 2, 3, 4, 5};
int *ptr = arr; // ptr指向数组arr的首元素
2.3 实战应用:动态分配内存
动态分配内存是C语言中处理不确定大小数据的一种方式。
int *ptr = (int *)malloc(sizeof(int) * 5); // 分配5个整数的内存空间
if (ptr != NULL) {
// 使用ptr指向的内存空间
free(ptr); // 释放内存空间
}
3. 结构体与联合体
3.1 结构体概述
结构体是一种用户自定义的数据类型,它可以包含不同类型的数据成员。
// 结构体定义
struct Person {
char name[50];
int age;
float height;
};
// 结构体变量声明
struct Person p1;
3.2 联合体概述
联合体是一种特殊的数据类型,它允许在相同的内存位置存储不同类型的数据。
// 联合体定义
union Data {
int i;
float f;
char c;
};
// 联合体变量声明
union Data u;
3.3 实战应用:结构体数组
结构体数组可以用来存储一组具有相同结构体的数据。
// 结构体数组定义
struct Person people[3] = {
{"Alice", 25, 1.65},
{"Bob", 30, 1.75},
{"Charlie", 35, 1.80}
};
4. 文件操作
4.1 文件概述
文件是存储在磁盘上的数据集合。C语言提供了丰富的文件操作函数。
// 打开文件
FILE *fp = fopen("example.txt", "r");
// 读取文件
char ch;
while ((ch = fgetc(fp)) != EOF) {
// 处理读取到的数据
}
// 关闭文件
fclose(fp);
4.2 实战应用:复制文件
复制文件是文件操作中常见的一个任务。
// 打开源文件
FILE *src = fopen("source.txt", "r");
// 打开源文件
FILE *dest = fopen("destination.txt", "w");
// 复制文件内容
char ch;
while ((ch = fgetc(src)) != EOF) {
fputc(ch, dest);
}
// 关闭文件
fclose(src);
fclose(dest);
5. 预处理器
5.1 预处理器概述
预处理器是C语言编译器的一个组成部分,它负责处理源代码中的预处理器指令。
#define PI 3.14159
#include <stdio.h>
5.2 实战应用:宏定义
宏定义是预处理器的一种常用功能,它可以简化代码。
#define MAX(a, b) ((a) > (b) ? (a) : (b))
int main() {
int x = 5, y = 10;
int max = MAX(x, y); // max的值为10
return 0;
}
通过以上内容,相信你已经对C语言的核心技巧有了更深入的了解。在实际编程过程中,不断实践和总结,才能更好地掌握这些技巧。
