C++:征服C指针:指针(二)

news2024/12/27 12:11:23

指针二

  • 1. 指向数组的指针
  • 2. 多维数组
      • 三级目录

上一篇文章我们介绍了:什么是指针,指针常见的问题,本篇我们主要介绍 :指针与数组。

1. 指向数组的指针

  1. int *p[n] : 指针数组, 它包括 n 个成员,每个成员都是一个指针,共有 5个指针 。 因为 [ ] 优先级高于 * ,相当于 int * (p[n]) .
  2. int (*p)[n] : 指向数组的指针,它是一个指针,用来指向有 5个元素的数组
  3. int *p = &array[0] : 指向数组初始元素的指针

💚💚💚 下面我用图来分析一下
在这里插入图片描述
💚 这里我重点分析下:指针数组 : int *p[n] , 看下 面代码

// 指针数组
void test_pointer_06_01()
{
	int (*p[5])[2];
	int element[2] = {1, 2};
	p[0] = &element;

	// 输出element 数组元素
	printf("element[0]: %d\n", (*p[0])[0]);  //1
	printf("element[1]: %d\n", (*p[0])[1]);  // 2 
	printf("p[0][0] address: %p\n", p[0][0]);  
	printf("element[0] address: %p\n", &element[0]);  
	printf("p[0][1] address: %p\n", p[0][1]);  
	printf("element[1] address: %p\n", &element[1]);  

	
	int element_2[2] = {3, 4};
	p[1] = &element_2;
	
	// element_2 数组元素
	printf("\n\nelement_2[0]: %d\n", (*p[1])[0]);  //3
	printf("element_2[1]: %d\n", (*p[1])[1]);  // 4
	printf("p[1][0] address: %p\n", p[1][0]);  
	printf("element_2[0] address: %p\n", &element_2[0]);  
	printf("p[1][1] address: %p\n", p[1][1]);  
	printf("element_2[1] address: %p\n", &element_2[1]);  
}
// 打印结果
element[0]: 1
element[1]: 2
p[0][0] address: 000000000061fdb8
element[0] address: 000000000061fdb8
p[0][1] address: 000000000061fdc0
element[1] address: 000000000061fdbc


element_2[0]: 3
element_2[1]: 4
p[1][0] address: 000000000061fdb0
element_2[0] address: 000000000061fdb0
p[1][1] address: 000000000061fdb8
element_2[1] address: 000000000061fdb4

老规矩,还是上图比较清晰,直观
在这里插入图片描述

2. 多维数组

其实C中不存在多维数组,那些看起来像多维数组其实就是“数组的数组”。这个多维数组通常使用 hoge[i][j] 来访问。
我们还是通过一张图,来看看多维数组在内存中的布局。

在这里插入图片描述
💚💚💚

  1. hoge 的类型为 “int 的数组(元素个数4个)的数组(元素个数3个)”。
  2. 尽管如此,在表达式中数组可以被解读成 指针,因此,hoge的类型为 “指向int 数组(元素个数4)的指针”。
  3. hoge[ i ] 是 *(hoge + i ) 的语法糖。
    1. 给指针加上 i , 意味着指针前进它指向的类型 (乘以 i )的距离。 hoge指向的类型为 “int的数组(元素个数为4个)”,因此,hoge+i 让指针前进 : sizeof(int[ 4 ] ) x i 的距离 。
    2. 通过 *(hoge + i )中的 星号 , 去掉一个指针, (hoge + i)的类型就是指向 int 的数组(个数为4个)
    3. 尽管如此,由于在表达式中,数组可以解读成指针, (hoge + i)的最终类型为 “指向int 的指针” 。
    4. (
    (hoge + i ))[ j] 和 (((hoge + i) + j )其实是相等的, 因此 (
    (hoge + i ))[ j] : 就是“对指向 int 的指针 加上 j 后得到地址上 的内容”, 其类型为 int 。

三级目录

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

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

相关文章

探索Maven创建项目全过程(超详细~~~)

文章目录 1.Maven介绍2.Servlet介绍2.1 Servlet定义2.2 Servlet的主要任务 3.创建Servlet程序步骤3.1 创建项目3.2 引入依赖3.3 创建目录3.4编写代码3.5 打包程序3.6 部署程序3.7 验证结果 4.更方便的部署方式4.1.下载Tomcat插件4.2 配置Tomcat插件4.3运行项目 1.Maven介绍 Ma…

认识Tomcat

hi,大家好,今天为大家带来Tomcat的相关知识 🍭1.Tomcat是什么 🍭2.Tomcat的下载安装 🍭3.Tomcat的目录结构 🍭4.启动Tomcat 🍭5.部署博客系统到Tomcat 🍉1.Tomcat是什么 我们之前也已经学了http,http…

【JAVAWEB】HTML的常见标签

目录 1.HTML结构 1.1认识HTML标签 1.2HTML文件基本结构 1.3标签层次结构 1.4快速生成代码框架 2.HTML常见标签 注释标签 标题标签:h1-h6 段落标签:p 换行标签:br 格式化标签 图片标签 超链接标签:a 表格标签 列表标签 表单标…

Windows 同时安装 MySQL5 和 MySQL8 版本

👏作者简介:大家好,我是Rockey,不知名企业的不知名开发着 🔥如果感觉博主的文章还不错的话,请👍三连支持👍一下博主哦 📝联系方式:he18339193956,…

MySQL 00 : MySQL_数据库shell登录时遇到的问题

问题1描述:输入链接数据块的命令提示 sh:mysgl:command not found 解决:第一步配置环境变量来解决 1、vim /etc/profile 2、末尾写入export PATH$PATH:/usr/local/mysql/bin 3、保存 4、执行 source /etc/profile 第二部 问题描述 Mac通过MAMP安装MySQL时&#…

K8s之Replicaset控制器详解

文章目录 一、ReplicaSet 控制器介绍二、ReplicaSet案例1、Pod副本扩缩容案例2、Pod更新版本案例 一、ReplicaSet 控制器介绍 官方中文参考文档: ReplicaSet是k8s中一种资源对象,简写 rs,用于管理Pod副本数量和健康状态,在spec.…

MySQL如何导入大量数据?

有时我们会遇到需要将大量数据导入MySQL的需求,一般数据存储在csv或者txt中,数据由","分隔。这里提供两种方案供大家选择。 一、创建测试表 为了测试,我们先创建数据库和表,并创建一个用户。 create database loadda…

js的BOM对象中的window、location使用

说明:BOM的全称是Browser Object Model,浏览器对象模型,有Window(浏览器窗口)、Navigator(浏览器)、Screen(屏幕)、History(历史记录)和Location&…

js函数、Array和String的定义和使用

函数 js中的函数&#xff0c;类似java中的方法 <script>// 定义函数方式一function addA(x, y) {return x y;}// 定义函数方式二&#xff0c;注意addB是函数的名称&#xff0c;不是返回值let addB function(x, y) {return x * y;}</script><script>docume…

vscode语音插件开发-在nodejs里面转换音频文件格式并压缩导出zip格式

继我的上一篇文章&#xff1a;&#xff01;vscode录音及语音实时转写插件开发并在工作区生成本地mp3文件 踩坑日记 音频格式转换这里我使用的是ffmpeg第三方库&#xff0c;官网文档。 ffmpeg简介 FFmpeg是一个跨平台的自由软件&#xff0c;用于实时音频、视频流以及音频、视频…

Vue电商项目--详情页面--产品售卖属性

滚动行为 开发某一个产品的详情页面&#xff1f; 1.静态组件 但是这个详情页&#xff0c;我们还没有注册为路由 当点击商品图片的时候&#xff0c;跳转到详情页面&#xff0c;在路由跳转的时候需要带上产品的ID给详情页面 干掉a标签换成router-link标签 这里要注意的一点是…

MybatisPlus处理业务数据新思路

文章目录 [toc] 1.问题2.新姿势3.总结 1.问题 由于之前搞了一个停车场的项目&#xff0c;有一个区域的停车场收费被投诉了被举报没有按照政府要求来计费&#xff0c;所以需要将之前的那些停车计费的数据重新计算&#xff0c;将多缴费的钱拿去交罚款&#xff0c;这个就很坑&…

MongoDB—Indexes

一、Indexes 索引支持在MongoDB中高效执行查询。没有 索引&#xff0c;MongoDB必须执行集合扫描&#xff0c;即扫描每个 集合中的文档&#xff0c;以选择与 查询语句。如果查询存在适当的索引&#xff0c; MongoDB可以使用索引来限制它必须的文档数量 检查。 索引是特殊的数据…

近期群晖容器查询注册表失败,无法下载镜像

前言 本以为是群晖的问题&#xff0c;后来发现大家也都遇到了类似的问题&#xff0c;查询注册表出现错误&#xff0c;无法搜索和下载docker镜像&#xff0c;本期就来介绍几个可平替的方案。 方案一&#xff1a;SSH拉取 使用SSH拉取首先要打开群晖的SSH功能&#xff1a;在【…

数据结构(C语言):顺序循环队列的基本操作

一、题目 设队列的元素类型为char&#xff0c;实现顺序循环队列的各种基本操作的程序&#xff1a; ① 初始化队列Q&#xff1b; ② 判断队列Q是否为空&#xff1b; ③ 入队操作。循环调用入队操作&#xff0c;将若干元素&#xff08;不少于10个&#xff09;入队&#xff1b…

LeetCode 49 字母异位词分组

LeetCode 49 字母异位词分组 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/group-anagrams/description/ 博主Github&#xff1a;https://github.com/GDUT-Rp/LeetCode 题目&#xff1a; 给你一个字符串数组&#x…

如何使用ChatGPT?初学者简单指南

Chat GPT 风靡全球&#xff0c;并在短时间内成为世界上增长最快的应用程序。随着所有关于其潜在影响的讨论&#xff0c;你可能会想知道&#xff1a;如何使用 ChatGPT&#xff1f; 使用 ChatGPT需要准备&#xff1a;一个 OpenAI 帐户和一个网络浏览器。 访问chat.openai.com并…

ICV报告:中国的数字经济与5G市场研究报告

近日&#xff0c;专注于前沿科技领域的国际咨询机构ICV发布了《中国的数字经济与5G市场研究报告》。报告指出&#xff0c;随着5G商用的发展&#xff0c;5G对经济社会的影响逐步显现&#xff0c;其影响突出体现在对数字产业发展的带动上。随着5G应用的不断创新与扩散&#xff0c…

网络公开课1

网络公开课1 概念* 常见面试题 输入URL发生哪些事 https http1.0 2.0的区别…… OSI七层模型 协议DNS 传输层 三次握手 四次挥手 http 物理层&#xff1a;并不是指光纤电缆那些&#xff0c;那些是设备。只关心如何传输数据&#xff0c;传输的是比特流 0 1。 应用层&#xff1a;…

汇编物理地址计算与段地址认识

1.物理地址概念: 所有内存单元构造的存储空间是一个一维性空间.每个内存单元在这个空间都有一个唯一的地址,这个唯一的地址称为物理地址. CPU通过地址总线送入存储器的必须是一个内存单元的物理地址. 不同的CPU有不同形式的物理地址形成方式. 物理地址计算公式: 物理地址 …