【C语言】指针题及解析

2023-11-01


需要云服务器等云产品来学习Linux的同学可以移步/-->腾讯云<--/-->阿里云<--/-->华为云<--/官网,轻量型云服务器低至112元/年,新用户首次下单享超低折扣。


 例一:需要考虑大小端问题(该例仅限32位平台、小端存储模式)

#include <stdio.h>
int main()
{
    int a[4] = { 1, 2, 3, 4 };
    int* ptr1 = (int*)(&a + 1);
    int* ptr2 = (int*)((int)a + 1);
    printf("%x,%x", ptr1[-1], *ptr2);//4,02000000
    return 0;
}

ptr2的解释:a是地址,强转为int,再加1,再强转为int*。整体效果为从a的地址开始,往后跳过一个字节。

ptr2为int*类型,解引用访问四个字节。

小端存储,倒着存,倒着拿。如下图:

例二:指针相减,差值为指针和指针之间的元素个数

#include <stdio.h>
int main()
{
    int a[5][5];
    int(*p)[4];
    p = (int(*)[4])a;
    printf("%p,%d\n",&p[4][2] -&a[4][2],&p[4][2] -&a[4][2]);//FFFFFFFC,-4
    return 0;
}

&p[4][2] -&a[4][2]的差值为-4,以%p的形式打印,得到FFFFFFFC

例三:字符串数组

#include <stdio.h>
int main()
{
	char* a[] = { "hello","world","!!!!" };
	char** pa = a;
	pa++;
	printf("%s\n", *pa);//world
	return 0;
}

a是字符串数组,类型是char*,pa是指向a的指针,pa++,跳过一个元素,解引用即可找到a数组第二个元素的地址,以%s打印,即为world。

例四:多重指针

#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);//POINT
	printf("%s\n", *-- * ++cpp + 3);//ER
	printf("%s\n", *cpp[-2] + 3);//ST
	printf("%s\n", cpp[-1][-1] + 1);//EW

	return 0;
}

按照题目画出图像:

printf("%s\n", **++cpp),首先cpp的地址+1,再连续两次解引用,第一次解引用找到c+1,再次解引用找到c[3],即"POINT"的地址,以%s打印即为POINT。如下图:

printf("%s\n", *-- * ++cpp + 3),首先cpp的地址+1,再解引用找到的是cp[3],再将cp[3]中的地址-1,再解引用找到c[0],再加3表示指向ENTER的指针右移三个字节,即为ER。如下图:

printf("%s\n", *cpp[-2] + 3),首先cpp[-2]可以看成*(cpp-2),即cp[0],再次解引用,即为指向FIRST的指针,再加3,变为指向S的指针,以%s打印,即为ST,如下图:

printf("%s\n", cpp[-1][-1] + 1),可以转化为*(*(cpp-1)-1)+1,即为EW,注意此处的cpp和cp[1]的值是不改变的。如下图:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【C语言】指针题及解析 的相关文章

  • 为什么这个 IA32 汇编代码有 3 个 leaal 指令?

    我编译了这个C函数 int calc int x int y int z return x 3 y 19 z 我在 calc s 中得到了这个 我正在注释正在发生的事情 file calc c text globl calc type ca
  • 是否有任何替代方法来实现 WebRTC SFU,只有 1 个上传流?

    我有一个服务器 能够将 WebRTC 媒体数据从 A 中继到 B 对于视频会议 如果我们采用 P2P 方法 则会创建一个网状网络 当P2P不起作用的时候 我们就可以拥有这个中继服务器 主要问题是在网状网络中 对于N个参与者来说 上传链路的数
  • 嵌套绑定表达式

    这是一个后续问题我之前的问题 https stackoverflow com questions 2735294 templates function pointers and c0x include
  • 如何防止函数中的隐式转换?

    我正在编写一个实用程序类 其中包含 IsEquals 和 IsGreaterThanEquals 等接受 double 类型参数的方法 当我将浮点值发送到方法时 它们会隐式转换为双精度值并进行比较 我不希望这种事发生 当我发送 float
  • C++ 构造函数根据参数类型调用另一个构造函数

    我有这门课 class XXX public XXX struct yyy XXX std string private struct xxx data 第一个构造函数 使用结构 很容易实现 第二 我可以将一个字符串以特定的格式分开 解析
  • 从 pdf 和 word 文件中提取文本

    如何在 C 中从 pdf 或 word 文件中提取文本 删除粗体 图像和其他富文本格式媒体 您可以使用专为索引服务设计 由索引服务使用的过滤器 它们旨在从各种文档中提取纯文本 这对于在文档内部进行搜索非常有用 您可以将其用于 Office
  • 预期在模拟中调用一次,但使用 Moq 时调用次数为 0 次

    我收到错误 在mock上调用一次 但是0次 下面是我的代码结构 public class GenerateAddress IGenerateAddress public GenerateAddress IAddress createAdd
  • 值类型数组如何存储在 .NET 对象堆中?

    在 NET中 诸如int之类的值类型对象存储在内存中 引用类型对象需要为引用和对象单独分配内存 并且对象存储在 NET对象堆中 而Array是在堆中创建的 那么int 等值类型的数组如何存储在堆中呢 这是否意味着值类型对象可以存储在堆中而无
  • 使用 rhino 模拟进行 lambda 单元测试失败

    如果我有这个测试 Expect Call session Single
  • 清除指针向量[重复]

    这个问题在这里已经有答案了 假设我定义了一个这样的类 class foo private std vector lt int gt v public void bar1 for int i 0 i lt 10 i int a new int
  • dotnet core 创建文件名中不含“CoreFxPipe_”的命名管道

    使用以下命令创建命名管道时命名管道客户端流 or 命名管道服务器流dotnet core 的类中 关联的 管道 看起来实际上是一个套接字 已自动将 CoreFxPipe 添加到文件名的前面 有没有一种非黑客的方法来防止这种行为 我只是希望文
  • 为什么未命名的命名空间不等同于带有“using命名空间”声明的常规命名空间?

    A 最近的话题 https stackoverflow com questions 3673353 anonymous namespace ambiguityon SO 触发了这个 未命名的命名空间被认为等同于 namespace uniq
  • llvm clang 编译器上的dynamic_cast失败

    我看到一个奇怪的失败dynamic cast正在返回NULL在 clang 编译器上 但相同的代码可以在 gcc 环境下运行 您能否指出根本原因是什么 之间可能有什么区别dynamic cast关于 llvm 和 gcc 我正在使用两个编译
  • 从 Windows 选择声音并播放它们

    我有一个 WinForms 应用程序 该应用程序有一个 首选项 部分 用户可以在其中选择显示警报时播放哪些声音 是否可以有一个组合框 用户可以从 Windows 存储的声音中进行选择 例如 紧急停止 紧急蜂鸣 等 这些可以在 控制面板 gt
  • 使用 C# 在 XML 文档中查找特定值的好方法是什么?

    我正在调用 Oracle 公开的 WebService 它接受 ItemID 的输入并向我返回相应的 Item Number 我想获取从响应中包含的 XML 返回的项目编号 XML 看起来像这样
  • boost::bind 会导致开销吗?

    我目前正在从事网络软件方面的工作 它有一个主要类 server这显然代表一个服务器实例 A server实例可以发送请求 并通过回调通知用户响应 代码如下 class server public typedef boost function
  • 基于 C++ 组件的类

    Hi 我正在使用容器编写一个基于组件的类 但是在考虑了许多不同的方法之后 我找不到真正符合我想要的方法 这是总体思路的一个例子 我已经写的代码 Abstract class Component class Component public
  • Pythonlibs3 CMake 和 macOS

    更新2 将以下两行添加到我的 CMake 文件中时 成功找到了 python 3 及其库 这只在终端中工作的原因是因为 CLion 使用其捆绑版本的 CMake 3 6 3 而我的终端使用的更新版本 3 7 2 正确找到了 python F
  • 是否可以使用 struct stat 描述符获取和设置文件名?

    是否可以在获取或设置 重命名 文件名时给出文件的绝对路径 并将 struct stat 实例作为 lstat 函数的参数 正如我在文档结构中发现的那样 struct stat dev t st dev ID of device contai
  • 找出用户属于哪些组

    我有一个刚刚创建的 Windows 用户帐户 以 XYZ 为例 此 XYZ 属于我在计算机管理 gt 本地用户和组中创建的用户组和自定义组 因此 在属性中我看到该用户属于 2 个组 现在我想获取这些组并显示它们 有什么建议么 我已经这样做了

随机推荐

  • SpringCloud微服务架构的学习理解一

    一 什么是springcloud springCloud是集合了其他的技术 多达21种的技术 集成了为微服务工作的各个组件 二 什么是微服务架构 微服务架构是由马丁 福勒提出的 将单一的应用程序划分为多个模块的进行服务设计的一种架构风格 其
  • Android混合开发的入门和方案

    前言 其实之前一直都很抵制hybrid开发 因为作为一个Android开发程序员 总是觉得原生的更好 其实是不想丢饭碗 但是一个闲着没事干 就写了一个demo搭了个webview 然后把html文件放到asset下面 一加载惊呆宝宝了 简直
  • pcl曲面网格模型的三种显示方式

    https www cnblogs com bozhicheng p 5842747 html
  • 一文讲透产品经理如何用好ChatGPT

    作者 京东零售 何雨航 4 0版本的ChatGPT可以有效提升产品经理工作效率 但并无法替代产品经理的角色 一 引言 3月15日 OpenAI发布了最新的基于GPT 4的ChatGPT 关于其智能性的讨论热度在互联网上空前高涨 我之前体验过
  • 试用虚拟服务器,免费试用的虚拟服务器

    免费试用的虚拟服务器 内容精选 换一换 弹性公网IP是可以直接访问Internet的IP地址 一个弹性公网IP只能给一个裸金属服务器使用 私有IP是公有云内网所使用的IP地址 用于内网通信 私有IP不能访问Internet 虚拟IP也称为
  • 类名称:CPicture

    新建一个基于对话框的工程 给你的对话框中加入一个静态文本控件 Static Text 或者图片控件 Picture Control 利用ClassWizard给控件关联一个变量 类型是 CPictureEx的 如 CPictureEx m
  • 借助国内ChatGPT平替+markmap/Xmind飞速生成思维导图

    系列文章目录 借助国内ChatGPT平替 MindShow 飞速制作PPT 借助国内ChatGPT平替 剪映 百度AIGC平台快速制作短视频 利用ChatGPT编写Excel公式 对比讯飞星火与ChatGPT对Excel公式的回答 文章目录
  • Application.OpenURL不同平台的使用

    using UnityEngine using System Collections public class testjar MonoBehaviour private static readonly int LocalVersion 1
  • 系统设计和机器学习算法

    LAMDA 机器学习书与数据挖掘研究所 算法训练网站 提供了大量可以练习的网站 1 Leetcode 2 Geeksforgeeks 3 Hackerrank 4 Lintcode paddlepaddle 系统设计 关注 系统设计 面向对
  • 测绘专业计算机编程要求,关于一些测绘圈子的信息,你需要了解!

    原标题 关于一些测绘圈子的信息 你需要了解 测绘学发展到今天 已经不再仅仅是简单的测量和制图了 如果你想往上发展 没有这些技能可能会很困难 这个时候 没有两把刷子 你好意思说你在测绘圈混 一 必要的数据基础和测绘学专业基础理论 这是进入测绘
  • 方舟服务器id哪里显示,明日方舟问卷id在哪查看?问卷id查看方法介绍

    明日方舟问卷id怎样填 找到自己的信息 完成奖励兑换 游戏爱好者小编带来方法详情 成功完成庆典活动 感谢庆典问卷数字id查看攻略 首先这个数字ID就在游戏主界面的个人昵称下方 具体位置如下图所示 注意这一串数字都属于数字ID 需要全部填写在
  • JavaScript洗牌函数

    喜欢做笔记 洗牌函数的封装 function getRandom min max return Math floor Math random max min 1 min function shuffle arr 不修改原数组 let arr
  • 公积金提取 -- 小黑日常超详细教程

    公积金说明 是入职以后五险一金中的一金 它的产生是国家给予的福利 国家规定它的缴纳数组成是 工资的6 12 然后按照公司给予福利的6 12 区间值计算 公积金存款 公司缴纳的百分比 x 你的工资 x 2 注 正经公司会根据实际发给你的工资计
  • 背完这444句,你的口语绝对不成问题了

    1 I see 我明白了 2 I quit 我不干了 3 Let go 放手 4 Me too 我也是 5 My god 天哪 6 No way 不行 7 Come on 来吧 赶快 8 Hold on 等一等 9 I agree 我同意
  • 公共数据运营模式研究报告 附下载

    本报告以公共数据运营模式为核心 以释放公共数据价值为目标 深入分析公共数据概念及特征 厘清公共数据运营的内涵及本质 提出纵深分域数据要素市场运营体系的总体思路 构建了一座 一个数据底座 两场 两级市场 三域 三个区域 四链 四个链条 的运营
  • Vue(踩坑)Error in render “TypeError Cannot read properties of undefined (reading ‘length‘)“

    我在网上搜了好久 说是我层级太深了 taskfillist我在vuex中的state中定义的是一个空数组 div 解决办法 在组件mounted过程中 taskfillist声明的空数组 在taskfillist length前面增加tas
  • MERN堆栈

    转自GeeksforGeeks的 Jasraj MERN Stack 翻译 MERN堆栈 MERN堆栈 是一个 Javascript 堆栈 用于更轻松 更快速地部署全栈Web应用程序 MERN堆栈包含 4 项技术 即 MongoDB Exp
  • 基于LIRI数据集的R语言探索:优化分析和可视化技巧

    基于LIRI数据集的R语言探索 优化分析和可视化技巧 引言 在数据科学和数据分析领域 R语言一直以来都是最受欢迎的工具之一 本文将使用LIRI数据集作为案例 介绍如何使用R语言进行数据分析和可视化 我们将涵盖数据清洗 特征提取 探索性数据分
  • 【matlab】中取矩阵的某一行某一列

    1 操作指令 取某一行 Ki K i 取某一列 Kj K j 取某几行 Kij K i j 取某几列 Kij K i j i和j表示行数和列数 2 举例分析 例如矩阵K 1 2 3 4 5 6 7 8 9 三行三列 K 1 2 3 4 5
  • 【C语言】指针题及解析

    需要云服务器等云产品来学习Linux的同学可以移步 gt 腾讯云 lt gt 阿里云 lt gt 华为云 lt 官网 轻量型云服务器低至112元 年 新用户首次下单享超低折扣 例一 需要考虑大小端问题 该例仅限32位平台 小端存储模式 in