首页/新闻资讯/正文详情

指针易混淆点

发布时间:2026/11/3 1:51:18 来源:云帆数科 栏目:资讯中心
指针易混淆点
1. 指针的本质变量 vs 地址 vs 值这是所有混淆的根源。指针是一个变量它存储的值是内存地址。取地址符获取变量的地址。*解引用符根据地址访问该位置存储的值。int a 10; int *p a; // p 是指针变量它的值是 a 的地址 // 混淆点 printf(%p\n, p); // 输出a的地址 (例如 0x7ffd4d6a2b4c) printf(%d\n, *p); // 输出10 (a的值) printf(%p\n, p); // 输出p变量自身的地址 (另一个地址)2. 声明与解引用中的**的含义取决于上下文极易搞混。声明时int *p;这里的*是类型说明符表示p是一个“指向int的指针”。表达式中*p 20;这里的*是运算符意思是“取出p指向的内存里的值”。3.const关键字与指针const的位置是核心难点决定了谁不能被修改。声明形式含义能否修改指针指向能否通过指针修改值int *p普通指针是是const int *pint const *p指向常量的指针是否int *const p指针常量否是const int *const p指向常量的指针常量否否记忆技巧const在*左边保护的是数据*p不能变。const在*右边保护的是指针p不能变。int a 1, b 2; const int *p1 a; // 指向常量的指针 // *p1 10; // 错误不能通过p1修改a p1 b; // 正确p1可以指向别处 int *const p2 a; // 指针常量 *p2 10; // 正确可以修改a的值 // p2 b; // 错误p2不能再指向别处二、 重点与核心操作1. 指针与数组的关系这是C语言的重点也是面试常考点。数组名在大多数情况下是一个指向数组首元素的常量指针。int arr[5] {10, 20, 30, 40, 50}; int *p arr; // 等价于 p arr[0];关键区别sizeof(arr)返回整个数组占用的字节数如5 * sizeof(int)。sizeof(p)返回指针变量本身的大小通常是4或8字节。arr得到的是整个数组的地址其值与arr[0]相同但类型是int (*)[5]。2. 指针的算术运算指针加减指针的加减是以其指向类型的大小为单位的这是重中之重。int arr[5] {10, 20, 30, 40, 50}; int *p arr; printf(%d\n, *p); // 输出 10 (arr[0]) printf(%d\n, *(p 1)); // 输出 20 (arr[1])p1 实际地址增加了 sizeof(int) p; // p 现在指向 arr[1]p n的实际地址是p的地址 n * sizeof(*p)这就是为什么char *加1跳1字节int *加1跳4字节。3. 数组表示法与指针表示法的等价性arr[i]在编译时完全等价于*(arr i)。arr[2] 100; *(arr 2) 100; // 这两行代码完全等价这解释了为什么数组下标可以从0开始因为arr[0]就是*(arr 0)。三、 高级难点1. 二级指针指向指针的指针用于修改指针变量本身。cint a 10; int *p a; int **pp p; // pp 是一个指向指针p的指针 // 通过pp访问a printf(%d\n, **pp); // 输出 10 // 通过pp修改p的指向 int b 20; *pp b; // 这相当于 p b;2. 函数指针指向函数的指针用于回调函数等高级用法。cint add(int a, int b) { return a b; } int (*func_ptr)(int, int); // 声明一个函数指针 func_ptr add; // 指向add函数 int result func_ptr(3, 4); // 通过指针调用函数result 73. 动态内存分配指针是操作堆内存的唯一途径。cint *p (int*)malloc(5 * sizeof(int)); // 分配容纳5个int的内存 if (p NULL) { /* 处理错误 */ } // 使用 p 就像使用数组名一样 p[0] 1; free(p); // 务必释放内存4. 野指针、空指针与内存泄漏野指针指向无效内存的指针如已释放的内存。空指针明确指向NULL的指针表示“不指向任何地方”。内存泄漏分配了内存但忘记释放。最佳实践cint *p NULL; // 初始化时设为NULL p (int*)malloc(sizeof(int)); // ... 使用 p ... free(p); p NULL; // 释放后立即设为NULL避免野指针总结表格最易混淆的指针声明声明含义int *p指向int的指针int **p指向“指向int的指针”的指针二级指针int *p[5]指针数组包含5个int指针的数组int (*p)[5]数组指针指向一个包含5个int的数组的指针int *p()函数返回一个int指针int (*p)()函数指针指向一个返回int的函数的指针

相关推荐

210亿参数撬动企业AI革命:ERNIE-4.5-21B-A3B-Thinking轻量化部署全景解析
210亿参数撬动企业AI革命:ERNIE-4.5-21B-A3B-Thinking轻量化部署全景解析

210亿参数撬动企业AI革命:ERNIE-4.5-21B-A3B-Thinking轻量化部署全景解析 导语 百度ERNIE-4.5-21B-A3B-Thinking模型以210亿总参数实现仅30亿激活参数的突破性设计,在Hugging Face全球模型趋势榜登顶的同时,重新定义了企业级AI部署的"… · 2026/11/3 1:51:18

NV-Generate-CT模型架构深度解析:3D UNet+注意力机制如何实现高质量图像生成
NV-Generate-CT模型架构深度解析:3D UNet+注意力机制如何实现高质量图像生成

NV-Generate-CT模型架构深度解析:3D UNet注意力机制如何实现高质量图像生成 NV-Generate-CT是一款基于3D UNet与注意力机制的先进医学影像生成模型,能够创建高分辨率的合成CT图像,为医疗AI研究提供强大的数据增强解决方案。该模型通过结合深… · 2026/11/3 1:50:18

NV-Generate-CT部署指南:在A100/H100 GPU上高效运行医学图像生成模型
NV-Generate-CT部署指南:在A100/H100 GPU上高效运行医学图像生成模型

NV-Generate-CT部署指南:在A100/H100 GPU上高效运行医学图像生成模型 NV-Generate-CT是一款先进的三维潜在扩散模型,专为生成高质量合成CT图像而设计,支持带或不带解剖学标注。该模型在医疗影像AI领域具有重要应用价值,尤其适用于… · 2026/11/3 1:50:18

透视每一个请求:OpenRouter ai-sdk-provider调试模式echo_upstream_body实战
透视每一个请求:OpenRouter ai-sdk-provider调试模式echo_upstream_body实战

【免费下载链接】ai-sdk-provider The OpenRouter provider for the Vercel AI SDK contains support for hundreds of models through the OpenRouter chat and completion APIs. 项目地址: https://gitcode.com/gh_mirrors/ai/ai-sdk-provider 点击查看 免费下载 … · 2026/11/3 2:21:23

模拟舵机、数码(数字)舵机、无刷大扭矩舵机区别
模拟舵机、数码(数字)舵机、无刷大扭矩舵机区别

核心定义1.模拟舵机(模拟电机舵机) 最早一代舵机,接收 PWM 信号,持续通电检测偏差,有偏差就不停修正。 ✅优点:价格便宜、电路简单,入门 RC 小车、小型模型够用; ❌缺点:… · 2026/11/3 2:21:23

Folia 安装指南:把全屏歌词动画播放器装到你电脑和 NAS 上
Folia 安装指南:把全屏歌词动画播放器装到你电脑和 NAS 上

Folia 安装指南:把全屏歌词动画播放器装到你电脑和 NAS 上 【免费下载链接】folia-major 专注于绚丽的歌词动画效果的本地音乐/navidrome/第三方多平台在线音乐播放器 项目地址: https://gitcode.com/GitHub_Trending/fo/folia-major Folia 是一款把歌词渲染… · 2026/11/3 2:21:23

OpenScreen 离线字幕怎么打包?Whisper 模型预置全流程
OpenScreen 离线字幕怎么打包?Whisper 模型预置全流程

OpenScreen 离线字幕怎么打包?Whisper 模型预置全流程 【免费下载链接】openscreen Create stunning demos for free. Open-source, no subscriptions, no watermarks, and free for commercial use. An alternative to Screen Studio. 项目地址: https://gitcode… · 2026/11/3 2:21:23

如何用 Thaw 管理 macOS 菜单栏图标:被刘海藏起来的图标怎么找回来
如何用 Thaw 管理 macOS 菜单栏图标:被刘海藏起来的图标怎么找回来

如何用 Thaw 管理 macOS 菜单栏图标:被刘海藏起来的图标怎么找回来 【免费下载链接】Thaw The open source menu bar manager 项目地址: https://gitcode.com/gh_mirrors/thaw/Thaw Thaw 是一款开源的 macOS 菜单栏管理器:它把菜单栏图标分成可见… · 2026/11/3 2:21:23

AutoHotkey自动化:3步搞定桌面文件整理
AutoHotkey自动化:3步搞定桌面文件整理

AutoHotkey自动化:3步搞定桌面文件整理 【免费下载链接】AutoHotkey AutoHotkey - macro-creation and automation-oriented scripting utility for Windows. 项目地址: https://gitcode.com/gh_mirrors/au/AutoHotkey 周五下午,一周的下载、截图… · 2026/11/3 2:20:23

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

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

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

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

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

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

STM32F411RE与MAX14431实现SPI隔离:工业现场抗共模干扰实战
STM32F411RE与MAX14431实现SPI隔离:工业现场抗共模干扰实战

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

ESP32+大模型AI硬件开发:从Demo到产品的8个工程问题
ESP32+大模型AI硬件开发:从Demo到产品的8个工程问题

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

基于MAX14431BAEE+与PIC18F85J10的SPI隔离方案设计与实践
基于MAX14431BAEE+与PIC18F85J10的SPI隔离方案设计与实践

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

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

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

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

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

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

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

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码