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

C语言【指针高阶】

发布时间:2026/9/27 7:47:09 来源:云帆数科 栏目:资讯中心
C语言【指针高阶】
指针高阶目录二级指针指针数组数组指针二维数组传参函数指针*********************************************在正文之前我们先了解一个知识arr[0数组第一个元素的地址arr数组第一个元素的地址arr整个数组的地址我们先来验证一下#includestdio.hintmain(){intarr[10]{1,2,3,4,5,6,7,8,9,10};printf(%p\n,arr[0];printf(%p\n,arr[0]1);printf(%p\n,arr);printf(%p\n,arr1);printf(%p\n,arr);printf(%p\n,arr1);return0;}如果我们只通过打印第135个printf时我们无法验证因为arr默认为首元素的地址所以135的输出结果是相同的均为首元素的地址那么我们通过第六个printf的结果可以得知在原来的基础上加了数组元素个数*指针对应字节大小个字节。这个是由位操作系统和开发环境决定的那么我们始终可以得出6与24是不同的相当与对每个元素都进行了1我们知道数组元素的地址是连续的那么我们也可以通过解引用比如 我们用int *parr: 那么 *(p1arr通过降级为首元素地址那么就相当于p是一个指向arr[0]的指针变量p相当于arr[0]的地址此时对p1,就相当于从arr[0]跳到了arr[1]1.二级指针二级指针主要作用是储存一级指针的地址数据类型** 指针变量名#includestdio.hintmain(){inta10;int*p1a;int**p2p1;return0;}这里我们就定义了一个二级指针我们来对**p2进行拆解我们先可以只针对p1,p2在针对a,p1来连接a和p2的关系首先我们需要知道p2指向的是p1的地址那么此时对p2进行解引用那么我们就拿到了p1的内容也是a的地址我们也知道对p1进行解引用得到是a的内容。也就是 **p2*p1a。那么我们打印的**p2也就是a的地址。printf(%p\n%p,*p2,p1);printf(%p\n%p,(**p),a);printf(%d\n%d,**p2,*p1);2.指针数组指针数组存放指针的数组。定义int*arr[];#includestdio.hintmain(){inta10;intb20;intc30;int*arr[]{a,b,c};printf(%d\n,*(arr1));printf(%d\n,**(arr1));return0;}通过输出结果我们可以知道通过一次解引用我们可以访问到变量本身的地址arr相当于数组元素首元素的地址也就是arr[0]我们在这里做一个区分数组元素内容是变量的地址而不是数组元素的地址我们通过访问数组元素的地址拿到的是变量的地址所以第一个printf打印的结果是b的地址以十进制整数输出的形式第二个printf输出的才是变量b的内容。3.数组指针数组指针指向数组的指针。是指针定义————————数据类型*指针名[数组长度]int (*p) [4]#includestdio.hintmain(){intarr[]{1,2,3,4};int(*p)[4]arr;printf(%p\n,*p);printf(%d\n,(*p)[1]);return0;}我们来看一下这两个printf分别打印的是什么第一个我们知道p指向的是数组所有的地址解引用就是数组名称我们知道数组名称会退化为首元素的地址所以第一个打印的也就是首元素的地址。第二个由第一个我们知道*p指的是数组名称那么*p[1]arr[1]到这里我们就再熟悉不过了。4.二维数组传参#includestdio.hvoidtest(int(*p)[5],intr,intc){inti0;intj0;for(i0;ir;i){for(j0;jc;j){printf(%d,*(*(pi)j);}printf(\n);}}intmain(){intarr[3][5]{{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15};test(arr,3,5);return0;}我们来解释一下* ( *(pi)j)我们知道p是一个数组指针i表示行j表示列p指向的是一个长度为5的一维数组相当于二维数组的一行当把二维数组arr传进时相当于第一行。现在我们来进行逐一的拆解1.pi:pi表示跳过i行此时指向的是二维数组的第i行的所有地址2. 解引用pi*pi)表示解引用第i行数组此时拿到的是数组名称会退化第一个元素的指针。那么arr[0]j就表示该行所有元素的地址此时再进行一次解引用就拿到了元素的内容。5.函数指针根据前面的学习整形指针数组指针的时候我们的类比关系我们不难得出结论函数指针变量应该是来存放函数地址未来通过地址能够调用函数。#includestdio.hvoidtest(){printf(hehehe\n);}intmain(){printf(%p\n,test);\\testtestreturn0;}输出的结果是相同的因此函数也存在地址。函数指针变量的使用#includestdio.hintadd(intx,inty){returnxy;}intmain(){int(*pf3)(int,int)add;printf(%d,(pf3)(2,3));printf(%d,*(pf3)(2,3));return0;}c语言标准规定函数名或函数指针在大多数表达式中会自动转化为指向函数的指针。

相关推荐

一流的江苏网站建设详细步骤
一流的江苏网站建设详细步骤

不会代码做一流江苏网站建设完整流程揭秘 手里没代码基础,却硬着头皮想搞个像样的公司官网?别慌,这事儿真没你想得那么玄乎。很多老板觉得“一流的江苏网站建设”是高不可攀的技术活,其实只要路子对,小白也能跑通从注册到上线的 完整流程 。… · 2026/9/27 7:47:09

微创医疗房租风波:用PSS⁵关系力看清大客户背后的关键人物
微创医疗房租风波:用PSS⁵关系力看清大客户背后的关键人物

公告里那句话值得每个大客户销售抄下来:需要更多时间审阅本集团与物业的业主及其联系人之间的关系。连上市公司自己都要花时间搞清楚关键人物关系,何况隔着层层组织的销售。 一、事件本身:一份把关系写进公告的调查 东方财富报道,… · 2026/9/27 7:47:03

SQL批量删除用户表:先清外键约束再删表的完整脚本与验证
SQL批量删除用户表:先清外键约束再删表的完整脚本与验证

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

5.MyBatisPlus学习
5.MyBatisPlus学习

特性 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作强大的 CRUD 操作:内置通用 Mapper、通用 Service… · 2026/9/27 9:46:17

AI Agent 面试题 229:Chain-of-Thought(CoT)推理在Agent决策中的应用原理
AI Agent 面试题 229:Chain-of-Thought(CoT)推理在Agent决策中的应用原理

🔥 AI Agent 面试题 229:Chain-of-Thought(CoT)推理在Agent决策中的应用原理摘要:本文深入解析了「Chain-of-Thought(CoT)推理在Agent决策中的应用原理」这一 AI Agent 领域的核心面试题。文章从… · 2026/9/27 9:46:05

AI Agent 面试题 225:Prompt中的约束条件应该如何表达才能被LLM准确理解?
AI Agent 面试题 225:Prompt中的约束条件应该如何表达才能被LLM准确理解?

🔥 AI Agent 面试题 225:Prompt中的约束条件应该如何表达才能被LLM准确理解?摘要:本文深入解析了「Prompt中的约束条件应该如何表达才能被LLM准确理解?」这一 AI Agent 领域的核心面试题。文章从 Prompt 设计原则 的基… · 2026/9/27 9:45:59

AI Agent 面试题 228:Few-shot、Zero-shot和One-shot Prompting在Agent中的应用对比
AI Agent 面试题 228:Few-shot、Zero-shot和One-shot Prompting在Agent中的应用对比

🔥 AI Agent 面试题 228:Few-shot、Zero-shot和One-shot Prompting在Agent中的应用对比摘要:本文深入解析了「Few-shot、Zero-shot和One-shot Prompting在Agent中的应用对比」这一 AI Agent 领域的核心面试题。文章从 Few-shot/Zero-shot/CoT… · 2026/9/27 9:45:58

揭秘建网站的方法:避开建站报价陷阱的实操指南
揭秘建网站的方法:避开建站报价陷阱的实操指南

揭秘建网站的方法:避开建站报价陷阱的实操指南 找建站公司最怕啥?不是技术不行,是报价单里藏着无数隐形消费。很多老板拿着“5000元全包”的预算,最后被收走2万,理由全是“服务器要升级”、“SSL证书要买企业版”。别急着骂中介黑心,很多时候是… · 2026/9/27 9:45:52

AI Agent 面试题 223:Prompt的结构化设计模式有哪些?各适用于什么场景?
AI Agent 面试题 223:Prompt的结构化设计模式有哪些?各适用于什么场景?

🔥 AI Agent 面试题 223:Prompt的结构化设计模式有哪些?各适用于什么场景?摘要:本文深入解析了「Prompt的结构化设计模式有哪些?各适用于什么场景?」这一 AI Agent 领域的核心面试题。文章从 Pr… · 2026/9/27 9:45:52

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

了解更多?预约专属演示

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

企业微信二维码