关于c中 指针数组、数组指针、二级指针的理解与证明

起因

对于 指针数组、数组指针、二级指针 这三个概念有点混淆,就花了一些时间证明。并且解释了一下关于这三种情况下的 *(p+1) 到底指向哪里的问题。

语法示例

int* pointerArr[5];	//指针数组,存放指针的数组int (*arr) [5];		//数组指针,指向数组的指针int ** pp;				//二级指针

*(p+1)情况

指针数组

意义

表示取出 第二个位置的 int* 数据而已,并未对这个位置的指针取值。
注意*的位置,是修饰前面的int,
表示这是一个一维数组,只是存储的类型是int
指针类型,仅此而已

跨越字节

int*类型,一个变量在64位下占用8字节
这里只是跳跃数组中一个元素,所以只跳跃8字节

代码示例
int main() {int a = 10;int b = 20;int * pointerArr[2];pointerArr[0] = &a;pointerArr[1] = &b;//只是取出 第二个位置的 int* 数据而已,并未对这个位置的指针取值cout << "*(pointerArr + 1) = " << *(pointerArr + 1) << endl;cout << "pointerArr[1] = " << pointerArr[1] << endl;//取出数组中,第2个位置的指针,指向的值cout <<"*pointerArr[1]="<< *pointerArr[1] << endl;return 0;
}

数组指针

意义

本身是数组指针,*p时代表原数组,(p)[index] 对数组中元素取值,而(p+1) 此时是表示,跳过一个int[5] 的长度,指向下一个int[5]的数组,因为p此时修饰的是 int[5] 类型,
就像 int *q,q修饰的是int类型一样

跨越字节

跳过了 int[5] 长度的字节,也就是 一整个数组,大概是 5*sizeof(int)

注意

对于数组指针来说,*(p+1) 这种跳跃,仅在二维数组时有意义,不然你跳跃了一个数组,跳到哪个地方去呢?一维数组紧挨着的内存,不一定是可读的内存

代码示例
int main() {int arr[3] = { 10,20,30 };int(*p)[3] = &arr;//*p 表示得到原本的数组的地址//*p +1 表示原本&arr[1],还不是值// *(*p+1) 表示对原本的数组取1下标的值 arr[1]cout << "(*p)[0]=" << (*p)[0] << endl;cout << "(*p)[1]=" << (*p)[1] << endl;cout << "*(*p+1)=" << *(*p + 1) << endl;//*(p+1) 此时是表示,跳过一个int[3] 的长度,指向下一个int[3]的数组//因为p此时修饰的是 int[3] 类型,//就像 int *q,q修饰的是int类型一样//跳跃仅对二维数组有意义int secondArr[2][3] = {{1,2,3},{4,5,6}};int(*secondP)[3] = &secondArr[0];//实际上,应该看做是secondArr[0] 这个数组的首地址//此时指向了 secondArr[1] 这个数组secondP++;//遍历secondArr[1] 这个数组for (size_t i = 0; i < 3; i++){cout << (*(secondP))[i] << endl;}return 0;
}

二级指针

意义

*(p+1) 对于二级指针来说,是跳过了一个 int 的内存,指向下一个int,仅对于 数组情况下,才有意义

跨越字节

p修饰的类型是int*,那么自增之后就是跳过一个 int*,在64位情况下指针占用8字节,因此是跳过8字节

代码示例
int main() {int a =10;int b = 20;int *one = &a;//一级指针int **second = &one;//二级指针//*second = one//**second = *one = acout << "**second=" << **second<< ",*one=" << *one<< ",a=" << a << endl;//*(p+1) 对于二级指针来说,仅在数组情况下有意义int*  arr[2];//*修饰int,因此故意写在前面arr[0] = &a;arr[1] = &b;int* * p = &arr[0];//通过*(p+1)得到b的地址int * bAddr = *(p + 1);//访问变量b的值cout <<  "b="<<b<<  ", *bAddr="<<*bAddr<< ", *arr[1]="<<*arr[1]<< endl;return 0;
}

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

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

相关文章

Python代码:二十一、增加派对名单(二)

1、题目 描述 为庆祝驼瑞驰在牛爱网找到合适的对象&#xff0c;驼瑞驰通过输入的多个连续字符串创建了一个列表作为派对邀请名单&#xff0c;在检查的时候发现少了他最好的朋友“Allen”的名字&#xff0c;因为是最好的朋友&#xff0c;他想让这个名字出现在邀请列表的最前面…

高密度絮凝沉淀澄清设备特性及价格

诸城市鑫淼环保小编带大家了解一下高密度絮凝沉淀澄清设备特性及价格 高密度沉淀池主要的技术是载体絮凝技术&#xff0c;这是一种快速沉淀技术&#xff0c;其特点是在混凝阶段投加高密度的不溶介质颗粒(如细砂)&#xff0c;利用介质的重力沉降及载体的吸附作用加快絮体的“生长…

python打造自定义汽车模块:从设计到组装的全过程

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言 二、定义汽车模块与核心类 三、模拟汽车组装过程 四、抽象与封装 五、完整汽车…

物联网应用系统与网关

一. 传感器底板相关设计 1. 传感器设计 立创EDA传感器设计举例。 2. 传感器实物图 3. 传感器测试举例 测试激光测距传感器 二. 网关相关设计 1. LORA&#xff0c;NBIOT等设计 2. LORA&#xff0c;NBIOT等实物图 3. ZigBee测试 ZigBee测试 4. NBIoT测试 NBIoT自制模块的测试…

代码随想录-算法训练营day53【动态规划14:最长公共子序列、不相交的线、最大子序和(动态规划)】

代码随想录-035期-算法训练营【博客笔记汇总表】-CSDN博客 第九章 动态规划part14● 1143.最长公共子序列 ● 1035.不相交的线 ● 53. 最大子序和 动态规划 详细布置 1143.最长公共子序列 体会一下本题和 718. 最长重复子数组 的区别 视频讲解:https://www.bilibili.co…

精彩大合集,手慢就没了!!

《springboot》 关键字&#xff1a;springboot 别闹了&#xff0c;你还在手写后台校验&#xff1f;试试Spring的这个注解吧&#xff01;&#xff01; Spring Boot的一个问题&#xff0c;证明你是不是真正的 "会用" Spring boot ? 兄弟们&#xff0c;集合&am…

vue3-api之provide与inject

传值&#xff1a; 父组件 > 子组件 > 孙组件 // 父组件 <template><div class"app"><h3>我是app组件(祖) --- {{ name }} {{ price }}</h3><child /></div> </template><script> import { reactive, toRefs,…

【LaTex】11 ACM参考文献顺序引用 - 解决 ACM-Reference-Format 顺序不符合论文实际引用顺序的问题

【LaTex】11 ACM参考文献顺序引用 写在最前面解决 ACM-Reference-Format 顺序不符合论文实际引用顺序的问题问题描述问题原因如何解决问题解决方案1&#xff08;更简单&#xff09;解决方案2&#xff08;更自由&#xff09; 小结 &#x1f308;你好呀&#xff01;我是 是Yu欸 …

浙江大学数据结构MOOC-课后习题-第六讲-图2 Saving James Bond - Easy Version

题目汇总 浙江大学数据结构MOOC-课后习题-拼题A-代码分享-2024 题目描述 测试点 思路分享 ①解题思路概览 我的想法是&#xff0c;先建立一个图&#xff0c;然后再利用DFS或者BFS来遍历判断当前顶点能否跳到岸上去 ②怎么建图&#xff1f; 首先要考虑采用什么数据结构来存储图…

uni微信小程序input框过滤中文字节以及规定以外的符号

问题描述 需求是输入账号只能为手机号、邮箱、字母和数字组成的字符串&#xff0c;那么就是所有大小写字母、数字、以及符号 - _ . 四种。 条件限制 微信小程序无法直接通过type属性实现&#xff0c;type属性中没有专门为只允许英文字母的输入类型。详情见input | uni-ap…

AI推介-多模态视觉语言模型VLMs论文速览(arXiv方向):2024.04.15-2024.04.25

文章目录~ 1.AutoGluon-Multimodal (AutoMM): Supercharging Multimodal AutoML with Foundation Models2.Fusion of Domain-Adapted Vision and Language Models for Medical Visual Question Answering3.CatLIP: CLIP-level Visual Recognition Accuracy with 2.7x Faster Pr…

LVM与磁盘配额09

一、LVM 1、lvm概述 lvm &#xff08;logical volume manager &#xff09;&#xff1a;逻辑卷管理 linux系统下对硬盘分区的一种管理机制。 场景&#xff1a;lvm机制特别适合于管理大存储设备。 作用&#xff1a;可以动态的对硬盘进行扩容 。 逻辑上的磁盘&#xff0c;概…

爬虫技术中的滑块验证问题及解决方案

一、引言 随着大数据时代的到来&#xff0c;网络爬虫技术已成为数据获取和分析的重要工具。然而&#xff0c;随着网络安全性的提高&#xff0c;越来越多的网站开始采用滑块验证技术来防止机器人程序的自动化访问。对于爬虫开发者来说&#xff0c;如何绕过或处理滑块验证成为了…

uni-app加载本地图片报500(Internal Server Error)异常解决办法

在网上看到关于加载本地图片500错误是因为分包后无法加载分包中的图片&#xff0c;需要在manifest.json中在对应平台的配置下添加"optimization" :{ “subPackages” : true } 这个方法对我遇到的这种错误无效&#xff0c;于是我仔细看了一下所报的异常 上面说在pac…

教你网站如何免费实现https

想要实现https访问最简单有效的的方法就是安装SSL证书。只要证书正常安装上以后&#xff0c;浏览器就不会出现网站不安全提示或者访问被拦截的情况。下面我来教大家怎么去获取免费的SSL证书&#xff0c;又如何安装证书实现https访问。 一、选择免费SSL证书提供商 有多家机构提…

灵狐剪辑软件,视频AI剪辑+去水印裁剪+视频 分割+批量合成+智能混剪(教程+软件)

1.介绍&#xff1a; 【灵狐剪辑】是一款视频编辑工具&#xff0c;能够帮助用户轻松地制作出专业级别的视频作品。这款软件拥有丰富的视频编辑功能&#xff0c;包括剪辑、合并、添加特效、调整音频等&#xff0c;让用户能够充分发挥创意&#xff0c;打造出独具特色的视频内容。…

OSINT技术情报精选·2024年5月第3周

OSINT技术情报精选2024年5月第3周 2024.5.27版权声明&#xff1a;本文为博主chszs的原创文章&#xff0c;未经博主允许不得转载。 1、爱分析&#xff1a;《小步快跑,数据库持续敏捷迭代&#xff1a;数据库应用实践报告》 在国家政策的推动、技术创新以及业务需求的共同驱动下…

Hugging face win使用教程(二)

1. 将环境迁移到win&#xff0c;可以直接下载修改好的cuda环境https://download.csdn.net/download/liangjiubujiu/89368302?spm1001.2014.3001.5503 2. 修改hugging face的缓存路径 3. 重启pycharm 4. 编写测试代码&#xff0c;注意可能由于网络链接问题&#xff0c;需要关…

finetuning大模型准备(基于Mac环境)

为finetuning进行的热身准备&#xff0c;涉及周边的软件工具&#xff0c;方法。 问题1&#xff1a;finetuning过程较长&#xff0c;采用系统自带命令行没有后台&#xff0c;前台被杀后&#xff0c;容易造成训练失败。 解决方法&#xff1a; tmux可以开启后台训练 问题2&…

Sql语法3

数据库语言大概可以分为四大类 1、DML&#xff1a;&#xff08;Database Manipulation Language&#xff09;:insert,update,delete 2、DQL&#xff1a;&#xff08;Database Query Language&#xff09;:select 3、DCL&#xff1a;&#xff08;Database Control Langu…