当前位置: 首页 > article >正文

嵌入式学习day15

指针部分概总C语言指针核心笔记一、指针基础1. 指针的本质指针是存储内存地址的变量其核心作用是间接操作内存空间解决函数内无法修改外部变量、动态管理内存等问题。2. 指针的定义语法// 格式数据类型 * 指针变量名;inta10;int*pa;// *表示定义指针变量取变量a的地址赋值给p数据类型决定指针解引用时访问的内存大小如int*解引用访问4字节char*访问1字节指针变量名存储目标变量的内存地址。3. 指针的大小32位系统所有指针大小为4字节地址总线32位64位系统所有指针大小为8字节地址总线64位指针大小与指向的数据类型无关仅与系统位数相关。4. 指针的访问方式访问方式语法说明直接访问a 20;直接通过变量名操作内存间接访问*p 20;通过指针解引用操作内存解引用*的执行步骤取出指针变量中存储的内存地址从该地址偏移sizeof(数据类型)字节定位内存空间操作该内存空间读/写。5. 野指针与NULL野指针未初始化的指针存储随机地址直接解引用会导致内存非法访问NULL定义为#define NULL (void*)0是无效地址用于初始化指针避免野指针int*pNULL;// 合法空指针解引用前需检查6. 指针运算符与算术运算运算符作用取地址变量→地址*解引用地址→变量指针算术运算规则p N/p - N地址偏移N * sizeof(数据类型)字节p/p--地址逐次偏移1个数据类型大小p - q仅同类型指针有效结果为地址间的元素个数无pq/p*q/p/q指针比较基于地址大小//等仅同类型指针比较有意义。二、指针与一维数组1. 数组名与指针的等价性数组名本质是数组首元素的地址常量不可修改因此inta[10]{1,2,3};int*pa;// 等价于 int *p a[0];2. 指针访问数组元素指针方式*(p i)访问第i个元素下标方式a[i]等价关系a[i] *(a i) *(i a) i[a]后两种仅语法合法无实际意义。三、指针与字符串1. 字符串的两种存储形式形式示例可修改性内存位置字符数组char s[] hello;可修改栈字符串常量char *s hello;不可修改只读区2. const与指针核心语法形式含义const char *s/char const *s指针指向的内容不可修改*s只读char * const s指针变量本身不可修改s只读const char * const s指针变量指向的内容均不可修改应用场景字符串函数参数用const char*避免函数内修改输入字符串。3. 常用字符串函数手动实现核心逻辑函数功能核心逻辑strlen计算字符串长度不含’\0’遍历字符串直到’\0’统计字符数strcpy字符串拷贝遍历src逐字符拷贝到dest最后补’\0’strncpy限定长度拷贝拷贝前n个字符未拷贝满n则补’\0’strcat字符串拼接先定位dest的’\0’再从该位置拷贝src的字符strcmp字符串比较逐字符比较ASCII值返回第一个不同字符的差值0相等0s1s20s1s2四、指针与二维数组1. 二维数组的内存本质二维数组是数组的数组如int a[3][4]是3个int[4]类型的一维数组内存中连续存储。2. 数组指针指向一维数组的指针// 定义数据类型 (*指针变量名)[一维数组长度];inta[3][4]{1,2,3,4,5,6,7,8,9,10,11,12};int(*p)[4]a;// p指向包含4个int的一维数组3. 二维数组的指针访问核心等价关系a[i][j] *(*(a i) j) *(p[i] j) p[i][j]4. 字符型二维数组 vs 指针数组// 1. 字符二维数组栈内存可修改chars1[3][10]{hello,world,china};char(*p1)[10]s1;// 数组指针指向含10个char的数组// 2. 指针数组存储字符串常量地址不可修改字符串内容char*s2[3]{hello,world,china};char**p2s2;// 二级指针指向char*类型的指针五、动态内存分配1. 核心函数需包含stdlib.h函数功能示例malloc分配指定字节的内存未初始化int *p (int*)malloc(10*sizeof(int));calloc分配n个size字节的内存初始化为0int *p (int*)calloc(10,sizeof(int));realloc重新分配内存扩展/缩小p (int*)realloc(p, 20*sizeof(int));free释放动态分配的内存free(p); p NULL;2. 注意事项动态内存分配在堆区需手动free释放否则内存泄漏free后必须将指针置NULL避免野指针void*指针需强制类型转换后解引用如*(int*)p。六、函数指针1. 定义语法// 格式返回值类型 (*指针变量名)(参数列表);intadd(inta,intb){returnab;}int(*pfunc)(int,int)add;// pfunc指向add函数2. 核心应用回调函数// qsort排序示例自定义比较函数intcompar(constvoid*a,constvoid*b){return*(int*)a-*(int*)b;// 升序排序}intarr[]{3,1,2};qsort(arr,3,sizeof(int),compar);七、特殊场景1. 返回指针的函数字符串函数如strcpy/strcat返回char*便于链式调用如strcat(strcpy(dest, src1), src2)。2. main函数的参数intmain(intargc,constchar*argv[]){// argc命令行参数个数至少为1argv[0]是程序名// argv字符串数组存储命令行参数}八、指针核心总结指针的核心是地址操作解决“间接修改变量、动态管理内存、数组/字符串灵活操作”问题指针使用三要素明确指针指向谁、指针的目标类型、避免野指针/内存泄漏关键等价关系数组下标↔指针偏移、二维数组↔数组指针、字符串↔char*const修饰指针需区分“修饰内容”还是“修饰指针本身”动态内存必须“申请-使用-释放”闭环函数指针是回调机制的核心。

相关文章:

嵌入式学习day15

指针部分概总: C语言指针核心笔记 一、指针基础 1. 指针的本质 指针是存储内存地址的变量,其核心作用是间接操作内存空间(解决函数内无法修改外部变量、动态管理内存等问题)。 2. 指针的定义语法 // 格式:数据类型 * 指…...

利用Batch Normalization优化VAE训练:突破后验坍塌的KL散度困境

1. 为什么VAE训练中会出现后验坍塌? 我第一次用LSTM作为VAE的解码器时,遇到了一个诡异现象:模型生成的文本看似合理,但隐变量z完全失去了意义。后来才明白这就是典型的后验坍塌(posterior collapse)。简单来…...

CRUISE纯电动车仿真模型与Simulink DLL联合仿真:电制动优先能量回收策略实现指南...

CRUISE纯电动车仿真模型,simulink DLL联合仿真,实现电制动优先能量回收策略。 关于模型:策略是用64位软件编译的,如果模型运行不了请将软件切换成64位。 切换位置在启动界面platform,或者进入软件后点option→ layout。…...

基于Doris构建实时数仓:架构设计与最佳实践

基于Doris构建实时数仓:架构设计与最佳实践 关键词:实时数仓、Doris数据库、MPP架构、实时数据摄入、查询优化 摘要:本文从电商大促场景下的实时数据需求出发,系统讲解基于Doris构建实时数仓的核心逻辑。通过“故事引入-概念拆解-…...

Phi-4-reasoning-vision-15B零基础上手:从打开网页到产出专业分析报告

Phi-4-reasoning-vision-15B零基础上手:从打开网页到产出专业分析报告 1. 引言:你的视觉分析新助手 想象一下,你拿到一份满是数据和图表的PDF报告,或者一张复杂的软件界面截图,需要快速提炼出关键信息。传统方法可能…...

WarcraftHelper:让经典魔兽争霸III重获新生的现代适配工具

WarcraftHelper:让经典魔兽争霸III重获新生的现代适配工具 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 问题发现:当经典遭遇…...

【新手必看】编译知识从入门到避坑,一文吃透流程+报错排查,学完直接落地

文章目录第一章 编译与解释的区别,别再混淆了1.1 编译型语言:一次性翻译,运行更高效1.2 解释型语言:逐行翻译,调试更灵活第二章 编译完整流程,4步从代码到可执行文件2.1 预处理:清理代码&#x…...

5个步骤掌握多智能体协作:SMAC框架从环境搭建到实战应用

5个步骤掌握多智能体协作:SMAC框架从环境搭建到实战应用 【免费下载链接】smac SMAC: The StarCraft Multi-Agent Challenge 项目地址: https://gitcode.com/gh_mirrors/smac/smac 多智能体强化学习框架已成为人工智能研究的重要方向,而SMAC&…...

高压漏电起痕测试仪配置维护全攻略

高电压漏电起痕耐电痕化测试仪交直流漏电起痕试验装置以下是进行该试验时对材料(试样)的详细要求,主要依据国际标准IEC60587和与之对应的国家标准GB/T6553《严酷环境条件下使用的电气绝缘材料评定耐电痕化和蚀损的试验方法》。核心要求概述该…...

终极实战指南:UWB超宽带室内定位系统如何实现厘米级精度与商业价值

终极实战指南:UWB超宽带室内定位系统如何实现厘米级精度与商业价值 【免费下载链接】UWB-Indoor-Localization_Arduino Open source Indoor localization using Arduino and ESP32_UWB tags anchors 项目地址: https://gitcode.com/gh_mirrors/uw/UWB-Indoor-Loc…...

BiRefNet高分辨率图像分割实战指南:从环境搭建到性能优化

BiRefNet高分辨率图像分割实战指南:从环境搭建到性能优化 【免费下载链接】BiRefNet [arXiv24] Bilateral Reference for High-Resolution Dichotomous Image Segmentation 项目地址: https://gitcode.com/gh_mirrors/bi/BiRefNet BiRefNet作为专注于高分辨率…...

YOLOv8鹰眼目标检测避坑:统计看板数据不准怎么办?

YOLOv8鹰眼目标检测避坑:统计看板数据不准怎么办? 1. 问题现象与影响分析 当使用"鹰眼目标检测 - YOLOv8"镜像进行物体统计时,您可能会遇到以下典型问题: 数量统计偏差:实际画面中有10个人,但…...

Java多线程:从基础到高级应用

Java 多线程:从基础到高级应用(2025–2026 生产视角) Java 多线程在过去 20 年经历了从“平台线程 线程池”到 Project Loom(虚拟线程 结构化并发 Scoped Values) 的巨大范式转变。 2025 年底到 2026 年&#xff0…...

Qwen3-32B-Chat百度技术布道者计划:认证讲师体系与标准化课件包开放下载

Qwen3-32B-Chat百度技术布道者计划:认证讲师体系与标准化课件包开放下载 1. 镜像概述与优化特性 Qwen3-32B-Chat私有部署镜像专为RTX 4090D 24GB显存显卡深度优化,基于CUDA 12.4和驱动550.90.07构建,提供开箱即用的大模型推理环境。该镜像已…...

CYBER-VISION效果展示:YOLO算法精准识别障碍物案例

CYBER-VISION效果展示:YOLO算法精准识别障碍物案例 1. 当AI视觉成为视障者的"第二双眼睛" 想象一下,当你走在繁忙的街道上,眼前突然变得模糊不清——路边的消防栓、随意停放的共享单车、突然窜出的电动车,都可能成为危…...

AI审核驱动的IACheck:海洋环境监测报告如何在多源数据中实现高质量稳定输出

在全球生态保护体系中,海洋环境监测占据着越来越重要的位置。从近岸水域到深海区域,从常规水质指标到生态系统变化,监测范围不断扩大,数据维度持续增加。在这一背景下,监测报告不仅承担着记录数据的功能,更…...

收藏备用|2026大模型学习全攻略(小白+程序员专属,从入门到精通无坑路线)

本文专为CSDN平台零基础小白、在岗程序员量身打造,核心分享“从实践到理论再到复盘实践”的科学大模型学习体系,覆盖Prompt工程、AI编程提效、API调用落地、RAG检索增强、Agent智能代理开发全流程,详解模型微调核心技术,同步附上2…...

毕业论文格式自动化:Paperxie 4000 + 院校模板,重构学术排版新效率

paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/aippthttps://www.paperxie.cn/format/typesettinghttps://www.paperxie.cn/format/typesetting 一、学术排版的效率革命:从手动 “磨格式” 到 AI “一键成稿” 在毕业论文的全流程中&#xf…...

终极突破:TimeMixer如何用可分解多尺度混合重新定义时间序列预测 [特殊字符]

终极突破:TimeMixer如何用可分解多尺度混合重新定义时间序列预测 🚀 【免费下载链接】TimeMixer [ICLR 2024] Official implementation of "TimeMixer: Decomposable Multiscale Mixing for Time Series Forecasting" 项目地址: https://git…...

Argos Translate颠覆解析:3个核心价值实战指南

Argos Translate颠覆解析:3个核心价值实战指南 【免费下载链接】argos-translate Open-source offline translation library written in Python 项目地址: https://gitcode.com/GitHub_Trending/ar/argos-translate 开篇:重新定义语言障碍的三大痛…...

Qwen3.5-9B一文详解:9B参数开源镜像+Gradio界面完整部署流程

Qwen3.5-9B一文详解:9B参数开源镜像Gradio界面完整部署流程 1. 引言 Qwen3.5-9B作为新一代开源大模型,凭借其9B参数的强大能力和创新架构,正在成为开发者社区的热门选择。本文将带您从零开始,完整部署这个集成了Gradio界面的强大…...

CosyVoice3问题解决手册:音频生成失败、发音不准怎么办?

CosyVoice3问题解决手册:音频生成失败、发音不准怎么办? 1. 常见问题快速诊断 遇到音频生成问题,建议按照以下步骤快速排查: 检查音频样本:是否符合3-15秒、16kHz以上的要求查看文本长度:是否超过200字符…...

Stable-Diffusion-3.5-FP8入门指南:3步完成环境配置,轻松生成高清图片

Stable-Diffusion-3.5-FP8入门指南:3步完成环境配置,轻松生成高清图片 想体验最新最强的AI绘画模型,但又担心自己的电脑配置不够?Stable Diffusion 3.5(SD 3.5)的发布确实带来了令人惊艳的画质&#xff0c…...

开源工具Synology HDD db:突破群晖NAS硬件兼容性限制实现存储自由选择指南

开源工具Synology HDD db:突破群晖NAS硬件兼容性限制实现存储自由选择指南 【免费下载链接】Synology_HDD_db 项目地址: https://gitcode.com/GitHub_Trending/sy/Synology_HDD_db 您是否曾遇到群晖NAS无法识别第三方硬盘的问题?是否因官方兼容性…...

ESP32 TWAI/CAN驱动深度解析与Arduino工程实践

1. ESP32-CAN 接口技术深度解析与工程实践指南ESP32 是乐鑫(Espressif)推出的高性能双核 Wi-Fi 蓝牙 SoC,广泛应用于工业控制、智能传感和物联网边缘节点。尽管其官方 SDK(ESP-IDF)自 v4.0 起已原生支持 CAN 总线协议…...

Botty暗黑破坏神2全自动刷宝脚本:3步告别手动Farming的智能助手

Botty暗黑破坏神2全自动刷宝脚本:3步告别手动Farming的智能助手 【免费下载链接】botty D2R Pixel Bot 项目地址: https://gitcode.com/gh_mirrors/bo/botty 厌倦了日复一日的手动刷宝?Botty暗黑破坏神2全自动刷宝脚本正是你需要的解放双手解决方…...

FireRedASR Pro快速上手:支持GPU加速,识别速度大幅提升

FireRedASR Pro快速上手:支持GPU加速,识别速度大幅提升 1. 项目概述 FireRedASR Pro是一款基于工业级语音识别模型开发的本地化ASR工具,特别针对中文语音识别场景进行了优化。该工具通过深度集成pydub音频处理流水线,解决了传统…...

JPEGView:让专业图像浏览与处理触手可及

JPEGView:让专业图像浏览与处理触手可及 【免费下载链接】jpegview Fork of JPEGView by David Kleiner - fast and highly configurable viewer/editor for JPEG, BMP, PNG, WEBP, TGA, GIF and TIFF images with a minimal GUI. Basic on-the-fly image processin…...

Kali Linux 原生AI渗透测试工作流:Claude + MCP 让自然语言驱动黑客工具

核心突破:Kali Linux(Offensive Security维护)于2026年1月正式推出AI辅助渗透测试集成。通过Anthropic的Claude AI(Sonnet 4.5模型)和开源Model Context Protocol(MCP),安全专家只需…...

DCT-Net视频处理:实时卡通化视频流

DCT-Net视频处理:实时卡通化视频流 1. 引言 你有没有想过,在视频会议或者直播时,让自己瞬间变成卡通人物?现在这已经不是科幻电影里的场景了。通过DCT-Net技术,我们可以实时将普通的视频流转换成卡通风格&#xff0c…...