【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语言】指针题及解析 的相关文章

  • 是否可以根据 QSlider 的位置来改变其手柄的颜色?

    我非常清楚如何通过样式表自定义 QSlider 但我想知道是否可以执行以下操作 我希望滑块的手柄从蓝色变为黄色 当设置在左侧时 它是蓝色的 设置在左侧时 它是蓝色的 当你将它向右移动时 它会出现从蓝色到黄色的渐变 如果可以通过样式表 如何实
  • C++ - 错误 C3646:未知的覆盖说明符

    我修改了我的项目 编译后弹出一些奇怪的错误 ifndef BART RAY TRACER MESH H define BART RAY TRACER MESH H include
  • 为什么这些冲突出现在以下 XML 的 yacc 语法中

    我有以下 XML 语法 效果很好 program lt ID attribute list gt root root lt ID attribute list gt node list lt ID gt node list node s n
  • 返回带有列表对象的列表对象

    我有三个表 汽车品牌 汽车型号 和 CarsandModel 我有 Carsand 模型表 因为一个模型可以由多个制造商构建 我想返回包含汽车型号列表的汽车品牌列表 我现在的长篇大论不是过滤汽车型号的汽车制造商列表 我尝试添加一个 wher
  • 通过指向基址的指针删除对象而不使用虚拟析构函数

    我有代码 class A1 public A1 cout lt lt A1 virtual A1 cout lt lt A1 class A2 public A2 cout lt lt A2 A2 cout lt lt A2 class B
  • C 语言的符号表

    我目前正在开发一种执行模式匹配的静态分析工具 我在用Flex https github com westes flex生成词法分析器 我编写了代码来管理符号表 我不太有经验C 所以我决定将符号表实现为线性链表 include
  • 是否有任何现成的组件可用于计算对象上的表达式?

    我们想要解析以下类型的表达式 Func
  • 如何使用 LINQ 对列表的列表进行分组(例如:List>)

    我知道我可以使用一些 for 循环轻松地做到这一点 但想看看是否有一种方法可以使用流畅的 LINQ 来做到这一点 我试图找出每个子列表中有多少个 我在看Enumerable SequenceEqual http msdn microsoft
  • pybind11 返回 numpy 对象数组

    使用 pybind11 C API 和 python3 我们如何在 C 实现中正确创建一个 numpy 对象数组 即 unicode 字符串 并将其返回给 python 传递到 pybind11 array 的底层数据数组的确切内存布局是什
  • SolrNet:尝试添加和提交时 SolrConnectionException (400) 错误请求

    我已经到了 SolrNet 执行 Add 方法的地步 但是当我尝试 Commit 时 我收到了错误 以下是我的 schema xml 模型 调用它的代码以及我得到的错误 更奇怪的是 尽管出现错误 但在我重新启动 Tomcat 后 该模型仍会
  • 如何用C语言创建字典?

    我正在用 C 语言编写一个微控制器 作为它的一部分 我想在 7 段显示器上显示某些字母 每个字母都有一个对应的数字 使 7 段显示屏显示该字母 它没有真正的模式 因为数字只是通过将显示字母所需的 7 段显示器上的位相加而成 因此如果我可以创
  • 如何在C#中使用默认浏览器打开带有锚点(#)的html文件

    我正在尝试在 C 中打开上下文帮助文件 当我没有指定锚点时 它工作得很好 Process Start C Help Help htm 但是当我指定锚点时 它不会打开 Process Start C Help Help htm Toc3420
  • 在.NET MVC中,有没有一种简单的方法来检查我是否在主页上?

    如果用户从主页登录 我需要采取特定的操作 在我的 LogOnModel 中 我有一个隐藏字段 Html Hidden returnUrl Request Url AbsoluteUri 在我的控制器中 我需要检查该值是否是主页 在下面的示例
  • 传输数据的 Symbol.WPAN.Bluetooth 示例

    我正在尝试将 EMDK 附带的 Symbol WPAN Bluetooth 用于 Symbol 设备 有人碰巧有一个传输数据的工作示例吗 Symbol 的示例只是将设备配对 他们显然认为在个人局域网示例中并不真正需要传输数据 不管怎样 我知
  • 寻找自定义 SynchronizationContext 的示例(单元测试所需)

    我需要定制同步上下文 http msdn microsoft com en us library system threading synchronizationcontext aspx that 拥有一个运行 Posts 和 Sends
  • MonoMac 窗口关闭时没有错误

    我刚刚开始在 Xamarin Studio 中使用 MonoMac 并且遇到了最奇怪的问题 我有一个带有 NSButton 和 NSTextField 的窗口 至此 我已经删除了按钮上的事件处理程序 因此它不会执行任何操作 除了在单击它时突
  • timeval_subtract 解释

    使用 timeval subtract 函数来查找两个 struct timeval 类型之间经过的时间 有人可以解释一下用于 通过更新 y 执行后续减法的进位 和其他部分的目的和逐步数学吗 我了解该函数的目的以及如何在程序中实现它 但我想
  • 并排显示图像的一半 - OpenGL

    我为两个图像创建了两个纹理 现在我想在opengl中按图像2的左侧部分 完整的图像1 图像2的右侧部分的顺序显示该纹理 我已经做了如下 Image1 显示在 opengl 屏幕的中央 但屏幕的左右部分不正确 应分别显示 image2 的左侧
  • 如何获取 (Linux) 机器的 IP 地址?

    这个问题和之前问的几乎一样如何获取本地计算机的IP地址 https stackoverflow com questions 122208 get the ip address of local computer 问题 但是我需要找到一个的I
  • 为什么删除void*是UB而不是编译错误?

    为什么要通过删除对象void 是未定义的行为 而不是编译错误 void foo void p delete p 这段代码编译并生成代码 尽管有关于 gcc 和 clang 的警告 令人惊讶的是 ICC 没有给出警告 2 5 warning

随机推荐

  • 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