C语言的指针
这篇笔记整理了指针的核心概念、运算、与const的结合、数组的关系以及函数中的应用帮你彻底搞懂指针。一、指针的基本定义指针本质上就是地址的别名。- 指针是一个变量存储的是另一个变量的内存地址。- 地址本身是一个常量值不可以被修改。int val 0; int* p val; // p是指针存储了val的地址 const int** p q; // 通过解引用操作符*修改val的值const int* pval;限定了p指向的值具有常性。int* const p;限定p的指向具有常性。指针与const的结合const 与指针的组合有三种常见情况需要分清限制的是指针本身还是它指向的值1. 指向const的指针 const int* p val;- 限制不能通过 *p 修改指向的值。- 允许指针 p 本身可以指向其他地址。2. const指针 int* const p val;- 限制指针 p 本身的地址不能改变一旦初始化就不能再指向别处。- 允许可以通过 *p 修改指向的值。3. 指向const的const指针 const int* const p val;- 限制指针本身和它指向的值都不能被修改。二、指针运算指针运算的核心是指针加减整型它的本质是“指针向前/向后移动N个指向类型的内存单元前提两个指针必须指向同一个连续空间。- p1 指针向前移动 sizeof(*p) 个字节。- p 指针自增指向下一个内存单元。- p1-p2 两个同类型指针相减得到它们之间相差的元素个数不是字节数。ElemType arr[5]; ElemType *parr; p1; //表示指针向高内存便宜了一个ElemType的类型长度最终结果就是arr[1] //p1只计算了指针的新地址而不会修改指针p本身 *p1; //这里进行了两步操作 //step1:对p进行解引用 //step2:对解引用的值加一 //比如arr[0]的值是0进行操作后值为1同样不会改变arr[0]和p本身依然在这个数组内如何通过指针p将第四个元素修改为61.直接偏移*p36;指针p偏移了3个ElemType长度指向arr[3].2.使用强制类型转换*int*int*p36先将p强制转换为int*类型然后再对p进行3个单位的偏移最后再进行一步解引用操作如何来理解这几步操作我们知道计算机内存的最小单位是字节但指针偏移的步长并不是固定的一字节而是由指针本身的类型来决定的我们再回到语句本身原来的P是ElemType*,转换后则是int*,而int*本身是四个字节的步长这一步就已经改变了指针p的偏移规则等于是告诉编译器接下来要把p按照int类型来计算第二步转换后3表示3*sizeof(int)12Byte,刚好指向原数组的第四个元素。三、指针与数组指针和数组关系紧密但它们不是同一个东西。数组指针 vs 指针数组这是面试高频考点一定要分清首先区分两个概念————指针数组VS数组指针1.指针数组指针数组的本质其实还是一个数组但这个数组里每一个元素存储的都是指针。2.数组指针本质还是一个指针只是这个指针指向了一个完整的数组int arr[5]; int(*p)[5] arr; //p指向了整个数组arr //在使用的时候首先解引用p得到数组arr然后才能访问数组里的元素四、指针与函数指针在函数中主要有两种角色作为参数和作为返回值。1. 函数参数指针传递当我们需要在函数内部修改函数外部变量的值时就需要传递变量的地址指针。void swap(int* a, int* b) { int temp *a; *a *b; *b temp; } int main() { int x 1, y 2; swap(x, y); // 传递x和y的地址 // 现在x2, y1 }2. 函数返回值返回指针函数可以返回一个指针但绝对不能返回局部变量的地址因为局部变量在函数结束后会被销毁地址会变成野指针。- 安全的返回值全局变量的地址、静态局部变量的地址、动态分配内存的地址、传入参数的地址。// 安全返回静态局部变量的地址 int* fun() { static int val 10; return val; }五、常用字符串与内存操作函数字符串函数 ( string.h )- strlen(str) 计算字符串有效长度不包括末尾的 \0 。- strcpy(dest, src) 将 src 字符串拷贝到 dest 。注意要确保 dest 有足够空间否则会导致缓冲区溢出。- strcat(dest, src) 将 src 字符串连接到 dest 的末尾。- strcmp(str1, str2) 按字典序比较两个字符串。- strstr(str, substr) 在 str 中查找 substr 子串首次出现的位置。- strtok(str, delim) 使用 delim 作为分隔符将字符串 str 分割成多个片段。内存操作函数 ( string.h )这些函数操作的是内存块不关心数据类型- memset(ptr, value, num) 将 ptr 指向的内存块前 num 个字节全部设置为 value 。常用于初始化。- memcpy(dest, src, num) 从 src 拷贝 num 个字节到 dest 。- memmove(dest, src, num) 功能同 memcpy 但可以安全地处理内存区域重叠的情况。- memcmp(ptr1, ptr2, num) 比较两个内存块的前 num 个字节。

相关新闻

matlab程序设计,承接研究范围:综合能源系统优化调度,主从博弈,综合需求响应,碳交易机制...

matlab程序设计,承接研究范围:综合能源系统优化调度,主从博弈,综合需求响应,碳交易机制...

matlab程序设计,承接研究范围:综合能源系统优化调度,主从博弈,综合需求响应,碳交易机制,阶梯型碳交易机制,多时间尺度优化。电力市场里最近有个挺有意思的事儿——某园区运营商和充电桩企业玩起…

2026/7/5 11:03:45 阅读更多 →
二十二层线路板制造排行:性能与成本的平衡之道

二十二层线路板制造排行:性能与成本的平衡之道

即便PCB层数已然突破22层,信号于层层叠叠的介质里高速穿行之际,工程师所遭遇的并非单纯的“能不能连通”这一问题,却是“信号还能否保真”、“热量还能否散出”这类核心挑战。身为电子系统的“神经网络”而言,22层线路板的制造早就…

2026/7/3 8:37:15 阅读更多 →
475. 供暖器

475. 供暖器

这道题我们可以采用贪心算法,每次找到离这个房屋的最短距离,最后求取最大值即可。首先可以先将heaters排序,这样可以方便使用二分查找,然后创建寻找最小距离的函数,每次传入房子所在的位置,在heaters中使用…

2026/5/17 10:23:27 阅读更多 →

最新新闻

基于协同过滤的SpringBoot+Vue商品推荐系统:从算法原理到工程实践

基于协同过滤的SpringBoot+Vue商品推荐系统:从算法原理到工程实践

这次我们来看一个基于协同过滤算法的商品推荐系统,这是一个典型的Java Web毕业设计/课程实践项目。项目采用SpringBoot Vue MySQL MyBatis的技术栈,实现了从用户行为数据采集到个性化商品推荐的全流程。对于正在学习Java后端开发、SpringBoot框架&…

2026/7/5 11:01:17 阅读更多 →
动作游戏开发:UE与Unity双引擎核心技术与实践指南

动作游戏开发:UE与Unity双引擎核心技术与实践指南

1. 动作游戏开发的核心预备知识体系作为从业十余年的游戏开发者,我经常被问到一个问题:"想开发一款UD(Unreal/Unity双引擎)动作游戏,应该从哪里开始准备?"这个问题看似简单,但实际上包…

2026/7/5 10:59:16 阅读更多 →
AI大模型API的CC攻击防御:构建多层算力防线与实战方案

AI大模型API的CC攻击防御:构建多层算力防线与实战方案

1. 项目概述:当AI算力成为攻击目标最近和几个做AI应用开发的朋友聊天,发现大家普遍遇到了一个头疼的新问题:自己辛辛苦苦搭建、调优的大模型API服务,上线没多久,访问量就异常飙升,服务器CPU和GPU瞬间拉满&a…

2026/7/5 10:57:16 阅读更多 →
Linux磁盘挂载:用UUID彻底解决盘符漂移,保障系统稳定

Linux磁盘挂载:用UUID彻底解决盘符漂移,保障系统稳定

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 在服务器运维和日常开发中,给 Linux 系统挂载新硬盘是一项基础但至关重要的操作。很多朋友,尤其是刚接触 Linu…

2026/7/5 10:57:16 阅读更多 →
从零构建Coze多智能体应用:架构设计与工程实践详解

从零构建Coze多智能体应用:架构设计与工程实践详解

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 在实际项目中,当我们需要构建一个能够处理复杂、多步骤任务的智能助手时,单一的逻辑处理单元往往会变得臃肿且…

2026/7/5 10:55:16 阅读更多 →
Dify:从AI原型到生产级应用的工程化平台实战指南

Dify:从AI原型到生产级应用的工程化平台实战指南

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 你是不是也遇到过这样的场景:想快速验证一个AI应用的想法,比如做个智能客服、文档问答机器人,或者…

2026/7/5 10:55:16 阅读更多 →

日新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻