新闻详情

新闻详情

首页 / 资讯中心 / 详情

C语言【指针高阶】

发布时间:2026/11/12 9:23:16来源:尧图网络
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语言标准规定函数名或函数指针在大多数表达式中会自动转化为指向函数的指针。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

【外设】之大彩串口显示屏 2026/11/11 13:52:51

【外设】之大彩串口显示屏

大彩串口屏初步使用 1 .官网下载 STM32 屏幕 GUI 设计资料 http://www.gz-dc.com/category/typeid/4112 找到 STM32 Keil 工程,移植相关代码因项目而异进行移植,由于项目简单,本人只对用到的指令接口进行修改。 比如:注意事项&…

阅读更多 →
无法下载Windows系统iso文件 2026/11/10 19:42:40

无法下载Windows系统iso文件

当我遇到这个问题的时候,我打开了一个网站: 登录 然后我打算下载的时候: 突然那个官方的连接就可以下载了:

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/11/11 9:31:44

【清华代码熊】DeepSeek V4.1 Flash 后训练详解

📌 上期解析了 DeepSeek V4.1 Flash 模型架构改进,本期解析 DeepSeek V4.1 Flash 预训练/后训练技术: 🌟 预训练:45T 文本 多模态混合语料、直接训练 sparse attention(取消 DeepSeek V4 的 dense 冷启动&…

阅读更多 →
Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ... 2026/11/11 5:36:08

Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ...

文章主要内容和创新点 主要内容 本文聚焦于多模态大语言模型(MLLM)强化学习(RL)训练中的效率问题,提出了一个名为Shuffle-R1的框架。研究发现,当前RL训练存在两个关键缺陷: 优势值坍缩(Advantage Collapsing):批次中大多数优势值集中在零附近,导致有效梯度信号被淹…

阅读更多 →
PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction 2026/11/11 15:37:39

PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction

一、文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现个人身份信息(PII)脱敏的研究,旨在解决传统脱敏方法(如基于规则的系统、领域特定命名实体识别(NER)模型)泛化能力差、跨格式/跨语境适应性弱的问题。 研究通过全面评估多种LLM架构(包括密集型LLM(D-LLM…

阅读更多 →
LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model 2026/11/10 17:14:10

LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model

文章主要内容和创新点 主要内容 本文聚焦于二进制图像-文本相关性评估任务(判断图像与文本“相关”或“不相关”),针对该任务中文本格式多样、相关性定义随场景变化等挑战,提出了基于多模态大语言模型(MLLM)的解决方案LLaVA-RE。 模型设计:LLaVA-RE基于LLaVA 1.5架构,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉