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. 学习总结今天学习的重点函数传参理解值传递和地址传递的区别掌握指针在函数参数中的应用。预处理掌握宏定义、文件包含和条件编译的基本用法。实践建议多写代码验证不同传参方式的效果理解宏展开的机制。通过今天的学习你应该能够正确使用值传递和地址传递编写带参数和不带参数的宏使用条件编译控制代码的编译过程

相关新闻

深入解析NandFlash:从工作原理到嵌入式实战应用

深入解析NandFlash:从工作原理到嵌入式实战应用

1. 从一块“坏”掉的U盘说起:为什么需要了解NandFlash?几年前,我手头一个用了很久的U盘突然“罢工”了。插上电脑,系统能识别到盘符,但容量显示异常,拷贝文件时要么报错,要么速度奇慢&#xff0…

2026/10/12 5:27:02 阅读更多 →
STM32 HAL库入门指南:从环境搭建到项目实战与优化

STM32 HAL库入门指南:从环境搭建到项目实战与优化

1. 从零开始的困惑:为什么是HAL库?如果你刚拿到一块STM32的开发板,打开官方资料,准备大干一场,大概率会立刻陷入一种选择困难症:我该用哪种库来写代码?是传说中的“标准库”(Standar…

2026/10/10 20:26:02 阅读更多 →
LangChain 中间件实战:HumanInTheLoopMiddleware 实现高危操作人工审核

LangChain 中间件实战:HumanInTheLoopMiddleware 实现高危操作人工审核

1. 引言 在构建基于大语言模型(LLM)的智能体(Agent)时,我们常常需要让 Agent 执行一些具有潜在风险的操作,例如直接操作数据库、调用外部 API 或执行系统命令。为了确保安全性和可控性,引入人工…

2026/10/9 22:20:21 阅读更多 →

最新新闻

KrakenC声传播仿真:轻量级水下声场建模实战指南

KrakenC声传播仿真:轻量级水下声场建模实战指南

简介:本资源是一份面向水声学研究者、海洋工程技术人员及声学仿真初学者的KrakenC与Kraken声传播建模实践工具包,聚焦水下声场计算与传播损失分析这一核心问题,适用于海洋环境监测、水下通信、声呐性能评估等实际场景。压缩包为ZIP格式&#…

2026/10/13 9:44:48 阅读更多 →
NoSQL 技术选型与数据库索引数据结构实战指南——基于 db-tutorial 开源仓库

NoSQL 技术选型与数据库索引数据结构实战指南——基于 db-tutorial 开源仓库

文档教程数据库 【免费下载链接】db-tutorial 📚 后端程序员应该掌握的主流数据库知识 项目地址: https://gitcode.com/gh_mirrors/db/db-tutorial 点击查看 免费下载 本文以 db-tutorial 项目"数据库综合"章节的两篇核心文档(Nos…

2026/10/13 9:44:48 阅读更多 →
Java+SpringBoot白酒物料管理系统设计与实现

Java+SpringBoot白酒物料管理系统设计与实现

1. 项目背景与选题价值洋河酒厂作为国内知名白酒生产企业,其酿酒物料管理具有典型的行业特性。传统的手工记录方式存在数据滞后、统计困难、追溯性差等问题,直接影响生产计划制定和成本核算精度。我们团队开发的这套基于Java的物料管理系统,正…

2026/10/13 9:44:48 阅读更多 →
傅里叶变换学习笔记:用线性代数理解量子力学位置动量表象

傅里叶变换学习笔记:用线性代数理解量子力学位置动量表象

我的书桌上现在摊着两本笔记:左边是线性代数,右边是量子力学。标题里“线性代数 or 量子力学”其实是个伪命题,因为这两本笔记翻到后面,都会跳出一个共同的名字——傅里叶。这篇外传要写的,就是我从一次跨学科复习中整…

2026/10/13 9:44:48 阅读更多 →
AI时代个人量化入门:从零开发适合你的交易策略

AI时代个人量化入门:从零开发适合你的交易策略

AI时代最大的红利:个人做量化,也能开发出一套适合你的策略讲点实在的。这两年身边越来越多的朋友问我,说看到网上那些AI量化、程序化交易的内容,自己也心动,但总觉得这东西门槛高——要么觉得得是数学博士才能碰&#…

2026/10/13 9:44:48 阅读更多 →
SPI通信时序分析-主/从模式的发送和接收

SPI通信时序分析-主/从模式的发送和接收

F407中文手册主/从模式下启动通信序列:时序图:主模式:通信启动:发送部分:软件等待TXE1,向 SPI 发送缓冲区写入第 1 个数据0xF1;硬件自动将0xF1载入移位寄存器,BSY 置 1,S…

2026/10/13 9:43:46 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →