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语言的核心技巧有了更深入的了解。在实际编程过程中,不断实践和总结,才能更好地掌握这些技巧。