指针扩展之——数组指针

news2024/11/27 5:27:29

前言:小伙伴们好久不见,因为刚刚开学事情比较多,所以好久没有更新,还请大家见谅。

那么从今天开始,博主承诺每周至少会出1-2篇博客,感谢小伙伴们的支持!

今天这篇文章,我们一起来了解以下指针的扩展——数组指针


目录

一.什么是数组指针

二.重温数组名的多种用法

三.数组指针的形式

四.数组指针的使用

五.总结


一.什么是数组指针

我们之前已经学习过了指针的基础知识,知道了字符指针,整形指针,那么什么是数组指针呢?

字符指针,是一个指向字符地址的指针;整型指针,是一个指向整型地址的指针

那么同理,数组指针,就是一个指向数组地址的指针呗

二.重温数组名的多种用法

我们知道,数组名在大多数情况下代表的是数组首元素的地址,但是也有两个例外:

  1. sizeof(数组名):数组名代表的是整个数组,计算的是整个数组的大小,单位是字节。
  2. &数组名:数组名也表示整个数组,取出的是整个数组的地址。

除了这两种特例之外,数组名用在其他地方均代表的是数组首元素的地址。

三.数组指针的形式

int a = 5;

int* p = &a;

char ch = 'b';

char* p = &ch;

这是整型指针和字符型指针的形式。那么数组指针又会是什么形式呢?

Int arr[5] = {1,2,3,4,5};

int (*p) [5] = &arr;

这便是数组指针的形式,*p代表着这是一个指针,[5]则表示这个指针指向的是一个数组,Int则表示指针指向的数组的类型

有的小伙伴们可能会问,()可以不要吗?

如果不要的话,就变成了int* p[5],这个是不是看着很眼熟?

没错,这是指针数组,是一个存放指针类型元素的数组,因为p会先跟[]结合

要注意一点就是不管你创建数组时有没有指定数组的大小,但是当你用一个数组指针指向一个数组时,数组的大小就不能省略,因为这样会被编译器认为指针指向了一个未知大小的数组

那么我们这里出个小问题:

int* arr[5];

如果用数组指针指向这个数组,该怎么表示?

Int* (*p)[5] = &arr;

小伙伴们答对了吗?

我们知道最上边是一个指针数组,那么我们要用一个数组指针去指向一个指针数组,就意味着这个指针要指向的是一个存放指针类型的数组,所以除(*p)外是Int* [5]这样一个指针数组的形式。

四.数组指针的使用

既然数组指针是一种指向数组的指针,那我们就用它来调用数组呗:

#include <stdio.h>
int main()
{
    int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
    int(*p)[10] = &arr;
    int i = 0;
    for (i = 0; i < 10; i++)
    {
        printf("%d ", (*p)[i]);
    }
    return 0;
}

比如说我们用数组指针来打印数组的元素,看起来像是很正常的事,但是有没有觉得很别扭?

如果想要打印一个一维数组的元素,是不是直接用普通的指针就可以了?

#include <stdio.h>
int main()
{
    int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
    int* p = arr;
    int i = 0;
    for (i = 0; i < 10; i++)
    {
        printf("%d ", p[i]);
    }
    return 0;
}

用普通的指针更方便也更易懂,那么数组指针到底该怎么使用呢?

实际上,数组指针的使用与函数和二维数组关系密切

如果将一维数组传递给函数,那么函数的形参接收的是数组首元素的地址,用普通的指针便可。

但是我们知道二维数组的数组名代表着数组第一行的地址是一个数组的地址,这个时候,函数的形参接收的是一个数组的地址,便需要用到数组指针来接收了。

我们实现一个打印二维数组元素的函数:

#include <stdio.h>
void print(int(*p)[5], int r, int c)
{
    int i = 0;
    for (i = 0; i < 3; i++)
    {
        int j = 0;
        for (j = 0; j < 5; j++)
        {
            printf("%d ", p[i][j]);
        }
        printf("\n");
    }
}
int main()
{
    int arr[3][5] = { {1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15} };
    print(arr, 3, 5);
    return 0;
}

五.总结

以上便是有关数组指针的相关知识啦,这部分知识虽不常用,但也很重要,希望小伙伴们能够耐心掌握!

最后,喜欢博主文章的小伙伴们不要忘记一键三连哦!

我们下期再见!

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

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

相关文章

06-Redis缓存高可用集群

上一篇&#xff1a;05-Redis高可用集群之水平扩展 1.集群方案比较 哨兵模式 在redis3.0以前的版本要实现集群一般是借助哨兵sentinel工具来监控master节点的状态&#xff0c;如果master节点异常&#xff0c;则会做主从切换&#xff0c;将某一台slave作为master&#xff0c…

C++之ostream操作函数operator<<、operator=、put、write、tellp、seekp、flush、swap总结(二百零八)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

数据结构 > 算法的时间复杂度(1)

目录 1.算法效率 1.1如何衡量一个算法的好坏 1.2算法的复杂度 1.3复杂度在校招中的考察 2.时间复杂度 2.1时间复杂度的概念 2.2大O的渐进表示法 2.3特殊情况 1.算法效率 1.1如何衡量一个算法的好坏 如何衡量一个算法的好坏呢&#xff1f;比如对于以下斐波那契数列&…

定积分的性质:不等式性质与中值定理

目录 定积分的不等式性质 定积分的中值定理 定积分的常用计算公式 定积分的不等式性质 定积分的不等式性质主要包含两个方面&#xff1a;定积分的绝对值性质和估值定理。 首先&#xff0c;定积分的绝对值性质可以表述为&#xff1a;如果函数f(x)在区间[a,b]上可积&#xff…

Talk | 北京通用人工智能研究院黄思远:让通用智能体理解三维世界

本期为TechBeat人工智能社区第530期线上Talk&#xff01; 北京时间9月13日(周三)20:00&#xff0c;北京通用人工智能研究院研究科学家—黄思远的Talk已准时在TechBeat人工智能社区开播&#xff01; 他与大家分享的主题是: “让通用智能体理解三维世界”&#xff0c;他分享了现有…

基于Pandas+余弦相似度+大数据智能护肤品推荐系统——机器学习算法应用(含Python工程源码)+数据集

目录 前言总体设计系统整体结构图系统流程图 运行环境Python环境Pycharm 环境 模块实现1. 文件读入2. 推荐算法1&#xff09;数据预处理2&#xff09;计算相似度3&#xff09;排序并提取产品4&#xff09;组合推荐算法 3. 应用模块1&#xff09;得到最终产品2&#xff09;筛选过…

【JavaEE】多线程(一)

多线程&#xff08;一&#xff09; 文章目录 多线程&#xff08;一&#xff09;进程操作系统进程PCB属性进程的状态进程的优先级进程的上下文CPU寄存器 进程的记账信息虚拟地址空间 线程线程与进程的区别 Java进行多线程编程 在了解多线程之前&#xff0c;我们先聊聊进程 进程 …

IO day6

1->x.mind 2-> #include <myhead.h> char c; ssize_t res1; //互斥锁 pthread_mutex_t mutexPTHREAD_MUTEX_INITIALIZER; //创建条件变量 pthread_cond_t condPTHREAD_COND_INITIALIZER; int flag0;//0:打印 1&#xff1a;倒置 void* callBack1(void* arg) { …

Python爬虫:获取必应图片的下载链接

文章目录 1. 前言2. 实现思路3. 运行结果 1. 前言 首先&#xff0c;说明一下&#xff0c;本篇博客内容可能涉及到版权问题&#xff0c;为此&#xff0c;小编只说明一下实现思路&#xff0c;至于全部参考代码&#xff0c;小编不粘贴出来。不过&#xff0c;小编会说明详细一些&a…

Mybatis系列之核心分析

文章目录 一、Mybatis的前世1、简述&#xff1a;2、什么是JDBC&#xff1a;3、什么是驱动&#xff1a;4、JDBC的开发步骤&#xff1a;《1》注册和加载数据库驱动《2》获得数据库连接《3》获得语句执行对象&#xff0c;然后执行SQL语句&#xff0c;获取执行结果&#xff0c;最后…

问道管理:机器人产业迎催化 黄金价格或将突破前高

昨日&#xff0c;沪指盘中震动下探&#xff0c;一度跌近1%逼近3100点&#xff0c;尾盘逐步止跌&#xff1b;深成指、创业板指均跌超1%。截至收盘&#xff0c;沪指跌0.45%报3123.07点&#xff0c;深成指跌1.14%报10255.87点&#xff0c;创业板指跌1.14%报2027.73点&#xff0c;科…

SpringBoot2.0(mybatis-plus初始使用)

目录 一&#xff0c;介绍二&#xff0c;SpringBoot2.x整合MybatisPlus Lombok2.1&#xff0c;添加依赖 pom2.2&#xff0c;配置数据库信息 application.properties2.3&#xff0c;工程结构初始化 三&#xff0c;创建接口返回统一对象四&#xff0c;创建bean五&#xff0c;创建…

iTOP-STM32MP157开发板Ubuntu镜像的烧写

由于 Ubuntu 镜像的烧写和之前的 QT 系统存在区别,QT 系统所使用的内核可以不用区分屏幕&#xff0c;而ubuntu 系统不同。所以我们在烧写镜像的时候需要修改对应的内核镜像&#xff0c;我们以烧写 ubuntu18 无桌面版本的镜像为例&#xff0c;镜像存放路径为“iTOP-STM32MP157 开…

Windows10/11强制删除多余的本地连接、以太网

如图进入到网络适配器准备删除多余的网络&#xff0c;发现无法删除&#xff0c;删除按钮是被禁用的。 解决办法 此电脑》右键》管理 找到对应连接下面的名称 设备管理器》网络适配器》Hyper-V Virtual Ethernet Adapter>右键》卸载设备 谨慎操作&#xff0c;卸载错的话…

基于视觉重定位的室内AR导航APP的大创项目思路(2):改进的项目思路——建图和定位分离

文章目录 一、建图二、定位首先是第一种方法&#xff1a;几何方法其次是第二种方法&#xff1a;图像检索方法最后是第三种方法&#xff1a;深度学习方法 前情提要&#xff1a; 是第一次做项目的小白&#xff0c;文章内的资料介绍如有错误&#xff0c;请多包含&#xff01; 一、…

递归学习——记忆化搜索

目录 ​编辑 一&#xff0c;概念和效果 二&#xff0c;题目 1.斐波那契数 1.题目 2.题目接口 3.解题思路 2.不同的路径 1.题目 2.题目接口 3.解题思路 3.最长增长子序列 1.题目 2.题目接口 3.解题思路 4.猜数字游戏II 1.题目 2.题目接口 3.解题思路 总结&a…

2.docker基础使用命令

请点击滑动滚轮&#xff1a;放大查看 PS:发现滚轮不能放大了&#xff0c;这傻B的csdn&#xff0c;越做越垃圾了。。。 来这个地址看吧&#xff1a;https://img-blog.csdnimg.cn/7a5eb5a1eca4484fa0faa73b398257bd.png&#xff0c;滑动滚轮放大 ​ 源文件&#xff1a; 点击下载…

快速幂 c++

一般大家写都是 int ans 1; for (int i 1; i < a; i )ans * x;时间复杂度 但是这对于我们还不够&#xff0c;我们要 首先我们得知道一个数学知识 那么求 就有以下递归式 a 能被2整除 a 不能被2整除 (这里a/2是整除) 所以每次都调用 不就是么 最后补充一个东西…

【Java从入门到精通】这也许就是Java火热的原因吧!

前言&#xff1a;Java是一种高级的、面向对象的、可跨平台的程序设计语言。Java根据技术类别可划分为以下几类&#xff1a;JavaSE&#xff08;Standard Edition&#xff0c;标准版&#xff09;&#xff1a;支持面向桌面、嵌入式和移动设备的应用程序开发&#xff1b;JavaEE&…

Apollo介绍和入门

文章目录 Apollo介绍配置中心介绍apollo介绍主流配置中心功能特性对比 Apollo简介 入门简单的执行流程Apollo具体的执行流程Apollo对象执行流程分步执行流程 核心概念应用&#xff0c;环境&#xff0c;集群&#xff0c;命名空间企业部署方案灰度发布全量发布 配置发布的原理发送…