C语言函数传参与预处理详解 1. 函数传参在C语言中函数参数的传递方式主要有两种值传递和地址传递。1.1 值传递值传递是C语言默认的参数传递方式。函数调用时将实参的值复制一份给形参形参和实参在内存中是两个独立的变量。#include stdio.h void swap(int a, int b) { int temp a; a b; b temp; printf(函数内a%d, b%d\n, a, b); } int main() { int x 10, y 20; swap(x, y); printf(主函数x%d, y%d\n, x, y); return 0; }输出结果函数内a20, b10 主函数x10, y20可以看到函数内交换了形参a和b的值但实参x和y的值没有改变。1.2 地址传递通过传递变量的地址指针可以在函数内部修改实参的值。#include stdio.h void swap(int *a, int *b) { int temp *a; *a *b; *b temp; } int main() { int x 10, y 20; swap(x, y); printf(交换后x%d, y%d\n, x, y); return 0; }输出结果交换后x20, y102. 预处理C语言的预处理是在编译之前进行的文本替换和处理以#开头的指令都是预处理指令。2.1 宏定义#define宏定义分为两种不带参数的宏和带参数的宏。2.1.1 不带参数的宏#define PI 3.14159 #define MAX_SIZE 100 int main() { double area PI * 5.0 * 5.0; int array[MAX_SIZE]; return 0; }2.1.2 带参数的宏#define SQUARE(x) ((x) * (x)) #define MAX(a, b) ((a) (b) ? (a) : (b)) int main() { int num 5; int square SQUARE(num); // 展开为 ((5) * (5)) int max MAX(10, 20); // 展开为 ((10) (20) ? (10) : (20)) return 0; }注意带参数的宏要小心使用每个参数和整个表达式都要用括号括起来避免优先级问题。2.2 文件包含#include将指定文件的内容插入到当前文件中。#include stdio.h // 系统头文件用尖括号 #include myheader.h // 用户头文件用双引号2.3 条件编译根据条件决定是否编译某段代码。#define DEBUG 1 #if DEBUG printf(调试信息\n); #endif #ifdef WINDOWS // Windows平台代码 #elif defined(LINUX) // Linux平台代码 #else // 其他平台代码 #endif3. 学习总结今天学习的重点函数传参理解值传递和地址传递的区别掌握指针在函数参数中的应用。预处理掌握宏定义、文件包含和条件编译的基本用法。实践建议多写代码验证不同传参方式的效果理解宏展开的机制。通过今天的学习你应该能够正确使用值传递和地址传递编写带参数和不带参数的宏使用条件编译控制代码的编译过程