领略指针之妙

news2024/11/28 10:38:43

𝙉𝙞𝙘𝙚!!👏🏻‧✧̣̥̇‧✦👏🏻‧✧̣̥̇‧✦ 👏🏻‧✧̣̥̇:Solitary-walk

      ⸝⋆   ━━━┓
     - 个性标签 - :来于“云”的“羽球人”。 Talk is cheap. Show me the code
┗━━━━━━━  ➴ ⷯ

本人座右铭 :   欲达高峰,必忍其痛;欲戴王冠,必承其重。

👑💎💎👑💎💎👑 
💎💎💎自💎💎💎
💎💎💎信💎💎💎
👑💎💎 💎💎👑    希望在看完我的此篇博客后可以对你有帮助哟

👑👑💎💎💎👑👑   此外,希望各位大佬们在看完后,可以互赞互关一下,看到必回
👑👑👑💎👑👑👑


 想必各位老铁们也知道,C语言的灵魂就在于指针,他很神奇,就像一把神奇的钥匙,可以打开指定的房间。有了这个精确的地址,我们也就不用再怕迷路了,哈哈哈。

OK,话不多说,接下来给各位老铁们看个神奇的代码,没错,就是此时屏幕前的你,顺便看看自己是否对指针轻松拿捏,不过话说在前面,下面这个代码要是对指针没有一定的功力再结合“码图”(也就是画图),可不是件容易的事

 题目:
#include<stdio.h>
int main()
{
	char* c[] = { "ENTER","NEW","POINT","FIRST" };
	char** cp[] = { c + 3,c + 2,c + 1,c };
	char*** cpp = cp;
	printf("%s\n",**++cpp );
	printf("%s\n", *--* ++cpp +3);
	printf("%s\n", *cpp[-2]+3);
	printf("%s\n",cpp[-1][-1]+1 );
	return 0;
}

 

 各位老铁们咱也就动起来吧,看看自己咋样

 分析:
1)初始状态对应的草图

 2)**++cpp的分析

1:cpp初始状态是指向数组cp的首元素的地址

2:++cpp注意这是前置加加(也就意味着cpp的指向要改变,同时也会对后面cpp的一系列操作有影响)cpp此时指向cp数组的第二个元素的地址

3:**++cpp 第一次解引用是指向c+2,再一次解引用是指向POINT这个字符串所指向的首元素地址

4:结果:POINT

3)*--* ++cpp +3

草图如下:

1:看到这个表达式可能有些老铁会发懵,不知从何下手(优先级)

 2:++cpp:指向数组cp的第二个元素(cp+2)

3:此时对++cpp进行解引用:指向数组C第二个元素的地址(c+1),再--指向的是数组C第一个元素的地址(c+ 0)对他进行解引用指向ENTER这个字符串首字符地址

4:此时最后指向 +3 的操作:对字符串跳过三个字符指向  E

5:打印结果: ER

4)*cpp[-2]+3

1:*cpp[-2]+3 ==   *(*(cpp - 2)) +3

2:cpp指向数组cp的第二个元素(cp+2)

3:cpp -2指向 cp+0 

4:*(cpp-2)访问的是 c+3

5:*(*(cpp-2)) 访问的是字符串 FIREST指向的第一个字符从地址

6: *(*(cpp - 2)) +3  此时指向 E的地址

7:打印:ST

5) cpp[-1][-1]+1 

 1:cpp[-1][-1]+1  == *(*(cpp-1)-1) +1

2:cpp-1 == cp+2-1 是指向 cp+1 

3:此时解引用是指向 c+2 的地址 ,此时在对这个地址-1,是指向c+1这个地址

4:*(*(cpp-1)-1)此时是的  c+1这个地址进行解引用(指向NEW的首字符地址)

注意:可不是对c+ 2 这个地址解引用(错在:对cpp-1后忘了解引用,就比如说我,嘻嘻嘻)

5: *(*(cpp-1)-1) +1 指向 E这个字符对应的地址

6:打印  :EW

 分析半天是对是错呢,咱让程序跑起来也看一眼:

结果:

结语:

或许这就是编程的魅力,我永远沉迷于此,陶醉其中。希望各位老铁看到我的这篇博客可以对指针有更深的理解,也希望"小白"也能有所收获,不过咱还是有啥说啥,这确实是需要一点点的功力的,没有点底子可能或许稍微吃力,欧克,又到了各位主角的舞台了(咱一波关注,一波赞走起,也是更好激励我的) 

温馨提示:最近天气比较极端,希望各位老铁照顾好自己,生病真的很难受,状态也不在线(我就是扛了一周左右)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1399241.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mac-hadoop3.3.6 源码构建以及踩坑记录

1. 为什么需要构建源码 因为hadoop的可执行文件 是在专门的机器上编译的 其中native库 不一定能适用于每个机器 导致在启动hadoop过程中 出现烦人的警告 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes w…

探索图像检索:从理论到实战的应用

目录 一、引言二、图像检索技术概述图像检索的基本概念图像检索与文本检索的区别特征提取技术相似度计算索引技术 三、图像检索技术代码示例图像特征提取示例相似度计算索引技术 四、图像搜索流程架构数据采集与预处理特征提取相似度计算与排名结果呈现与优化 五、实际应用图像…

探索世界,从一款好用的浏览器开始!

好用的浏览器分享 在这个数字化的时代&#xff0c;浏览器已经成为了我们生活中不可或缺的工具。从浏览新闻、社交媒体到工作学习&#xff0c;我们几乎无时无刻不在与浏览器打交道。那么&#xff0c;如何选择一款好用的浏览器呢&#xff1f;今天&#xff0c;我就来为大家分享几…

git中合并分支时出现了代码冲突怎么办

目录 第一章、Git代码冲突介绍1.1&#xff09;什么是Git代码冲突①git merge命令介绍②代码冲突原因 1.2&#xff09;提示代码冲突的两种情况①本地不同分支的文件有差异时&#xff1a;②本地仓库和git远程仓库的文件有差异时&#xff1a; 1.3&#xff09;解决合并时的代码冲突…

linux sudo指令提权

sudo指令 sudo 是在linux中用于以超级用户&#xff08;root&#xff09;权限执行命令的命令。它允许普通用户在执行特定命令时提升其权限&#xff0c;以完成需要超级用户权限的任务。sudo 的名称是 "superuser do" 的缩写。 格式 接受权限的用户登陆的主机 &#xff…

【LLM问答】两阶段的对话式问答模型ChatQA思路和兼看两阶段的RAG知识问答引擎QAnything

一、ChatQA 1.1 微调 如下图&#xff0c;ChatQA微调包含两个阶段&#xff0c;Supervised Fine-tuning和Context-Enhanced Instruction Tuning 1.1.1 阶段一&#xff1a;SFT&#xff08;Supervised Fine-tuning&#xff09; 这个阶段的目标是基于LLM&#xff0c;通过SFT&…

虚拟歌姬学习:DiffSinger,让GitHub下载快的方法!

《三分钟上手DiffSinger》系列 ——基础篇https://www.bilibili.com/video/BV1ug4y1S7Dk/?spm_id_from333.337.search-card.all.click&vd_source124076d7d88eee393a1d8bf6fc787efa 下载DiffSinger 建议用edge浏览器还有steam&#xff0c;有时只是慢&#xff0c;但是还是…

Harmony Ble蓝牙App(四)描述符

Harmony Ble蓝牙App&#xff08;四&#xff09;描述符 前言正文一、优化二、描述① 概念② 描述提供者③ 显示描述符 三、源码 前言 上一篇中了解了特性和属性&#xff0c;同时显示设备蓝牙服务下的特性和属性&#xff0c;本文中就需要来使用这些特性和属性来完成一些功能。 正…

VS+QT编译环境中字符乱码问题详解

字符乱码问题详解 1 编码字符集与字符编码方式2 字符乱码原因3 字符乱码解决方案 在解释字符乱码问题之前&#xff0c;我们需要先理清一些基本概念 1 编码字符集与字符编码方式 编码字符集 编码字符集是所有字符以及对应代码值的集合。编码字符集中的每个字符都对应一个唯一的…

一步一步写线程之五线程池的模型之一领导者追随者模型

一、线程池的模型 在学习过相关的多线程知识后&#xff0c;从更抽象的角度来看待多线程解决问题的方向&#xff0c;其实仍然是典型的生产和消费者的模型。无论是数据计算、存储、分发和任务处理等都是通过多线程这种手段来解决生产者和消费者不匹配的情况。所以&#xff0c;得…

MySQL主从集群

MySQL主从集群 主从模式、集群模式&#xff0c;都是在一个项目中使用多个mysql节点进行存储和读取数据。 当单机模式部署&#xff0c;不满足安全性、高可用、高并发等需求的时候&#xff0c;就需要考虑主从模式或者集群模式部署。 什么是主从模式&#xff1f; 主从模式&…

commvault学习(5):在linux上安装cv客户端

我的环境&#xff1a; 服务器&#xff08;同时装有CS、MA&#xff09;&#xff1a;windows server2008r2 客户端&#xff1a;两台centos7 1.为两台centos7配置静态ip 使得2者可以与服务器ping通 2.在两台centos7上预留出足够大的磁盘空间以存放安装文件 我是在/mnt下创建了…

十本你不容错过的Docker入门到精通书籍推荐

前言&#xff1a; 最近有许多小伙伴私信让我推荐几本关于Docker学习的书籍&#xff0c;今天花了一下午的时间在网上查阅了一些资料和结合自己平时工作中的一些学习参考资料书籍写下了这篇文章。注意以下书籍都是十分优秀的Docker学习书籍&#xff08;因此排名不分先后&#xff…

tritonserver学习之三:tritonserver运行流程

tritonserver学习之一&#xff1a;triton使用流程 tritonserver学习之二&#xff1a;tritonserver编译 tritonserver学习之四&#xff1a;命令行解析 1、triton启动运行流程 triton功能设计全面&#xff0c;而且复杂&#xff0c;下面是triton(2.41.0)启动的整个流程&#x…

从函数角度看品牌网络推广:短期与长期的博弈

在数字营销的世界里&#xff0c;品牌网络推广无疑是一个复杂而多维度的领域。它不仅仅是一个简单的“投入-产出”关系&#xff0c;而是一个涉及到多种因素、时间和空间的动态过程。当我们尝试从函数的角度去解读品牌网络推广时&#xff0c;会发现它其实是一个不断变化的函数关系…

我在人工智能技术方面的发展规划

人工智能(AI)是当今科技领域最具前景和影响力的技术之一,它已经渗透到各行各业,为社会和经济发展带来了巨大的机遇和挑战。作为一名从事人工智能研究和开发的专业人士,我有必要制定一个合理的人工智能技术发展规划,以指导我的学习和工作,提高我的专业水平和竞争力,为人…

009 Linux_文件系统 | 软硬链接

前言 本文将会向你介绍文件系统与软硬链接 文章重点 本文将会先向你介绍文件是如何在磁盘上进行管理的&#xff0c;关于文件的管理将会从管理属性和管理内容两方面来谈&#xff0c;最后会向你介绍软硬链接的概念 文件在磁盘中的管理 首先&#xff0c;假设一个磁盘200GB&#…

softmax回实战

1.数据集 MNIST数据集 (LeCun et al., 1998) 是图像分类中广泛使用的数据集之一&#xff0c;但作为基准数据集过于简单。 我们将使用类似但更复杂的Fashion-MNIST数据集 (Xiao et al., 2017)。 import torch import torchvision from torch.utils import data from torchvisi…

25计算机考研408专业课复习计划

点击蓝字&#xff0c;关注我们 今天要分享的是25计算机考研408专业课复习计划。 以下内容供大家参考&#xff0c;大家要根据自己的复习情况进行适当调整。 统考与自命题 统考科目是指计算机学科专业基础综合&#xff08;408&#xff09;&#xff0c;满分150分&#xff0c;试…

用MATLAB函数在图表中建立模型

本节介绍如何使用Stateflow图表创建模型&#xff0c;该图表调用两个MATLAB函数meanstats和stdevstats。meanstats计算平均值&#xff0c;stdevstats计算vals中值的标准偏差&#xff0c;并将它们分别输出到Stateflow数据平均值和stdev。 请遵循以下步骤&#xff1a; 1.使用以下…