【C语言基础入门】二级指针、一维数组与指针、二维数组与指针

news2024/11/26 22:35:27

文章目录

  • 前言
  • 一. 二级指针
    • 1.1 二级指针是什么?
    • 1.2 二级指针使用示例
    • 1.3 拓展:n级指针
  • 二. 一维数组与指针:
    • 2.1 利用指针遍历数组:
    • 2.2 指针数组
    • 2.3 数组指针
  • 三、 二维数组指针
    • 3.1 二维数组指针是什么?
      • 示例代码
    • 3.2 指针数组
      • 示例代码
    • 3.3 利用指针遍历二维数组:
  • 总结


前言

在学习C语言的过程中,理解指针的概念是非常重要的。指针提供了一种直接访问内存地址的方式,使得我们可以更加灵活地管理数据和内存。在本文中,我们将介绍C语言中的二级指针、一维数组与指针,并通过通俗易懂的语言和示例代码来帮助读者理解这些概念。


一. 二级指针

1.1 二级指针是什么?

二级指针是指指向指针的指针。用更简单的话来说,就像你有一张地图,上面有一个标记,这个标记实际上是指向另一张地图的指针。你实际上有两层地图,一层指向另一层。

1.2 二级指针使用示例

#include <stdio.h>

int main() {
    int num = 42;
    int *ptr1 = &num;   // 一级指针,指向整数
    int **ptr2 = &ptr1; // 二级指针,指向指针的指针

    printf("Value of num: %d\n", **ptr2);
    return 0;
}

在这里插入图片描述

在这个示例中,ptr2 是一个指向 ptr1 的指针,通过两次解引用操作可以获取到 num 的值。

除了二级指针,还有 n 级指针,表示指向指针的指针的…的指针。以下是一个三级指针的示例:

1.3 拓展:n级指针

int ***ptr3 = &ptr2; // 三级指针,指向指针的指针的指针

在这里插入图片描述

理解这种多层指针时,关键是逐层解读每个指针的作用。

二. 一维数组与指针:

2.1 利用指针遍历数组:

#include <stdio.h>

int main() {
    int arr[] = {1, 2, 3, 4, 5};
    int *ptr = arr; // 数组名本身就是一个指向数组首元素的指针

    for (int i = 0; i < 5; ++i) {
        printf("%d ", *(ptr + i));
    }

    return 0;
}

在这里插入图片描述

这里,ptr 指向数组的第一个元素,通过指针的偏移遍历整个数组。

2.2 指针数组

#include <stdio.h>

int main() {
    int a = 1, b = 2, c = 3;
    int *arr[] = {&a, &b, &c}; // 指针数组

    for (int i = 0; i < 3; ++i) {
        printf("%d ", *(arr[i]));
    }

    return 0;
}

在这里插入图片描述

在这个示例中,arr 是一个指针数组,存储了三个整数指针,通过数组下标访问各个指针。

2.3 数组指针

#include <stdio.h>

int main() {
    int arr[] = {1, 2, 3, 4, 5};
    int (*ptr)[5] = &arr; // 数组指针

    for (int i = 0; i < 5; ++i) {
        printf("%d ", (*ptr)[i]);
    }

    return 0;
}

在这里插入图片描述

这里,ptr 是一个指向包含5个整数的数组的指针。

三、 二维数组指针

3.1 二维数组指针是什么?

二维数组指针是指向二维数组的指针。它通常用于处理多维数组的情况,允许对二维数组进行更灵活的操作。
二维数组指针的声明类似 int (*ptr)[N],其中 ptr 是指向包含N列的整数数组的指针。

示例代码

#include <stdio.h>

int main() {
    int arr[2][3] = {{1, 2, 3}, {4, 5, 6}};
    int (*ptr)[3] = arr; // 指向二维数组的指针

    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 3; j++) {
            printf("%d ", ptr[i][j]);
        }
        printf("\n");
    }

    return 0;
}

在这里插入图片描述

3.2 指针数组

指针数组是一个数组,其元素都是指针。通常用于存储多个指向不同数据类型的指针。
例如,int *ptrArr[3] 表示一个包含3个整数指针的数组。

示例代码

#include <stdio.h>

int main() {
    int a = 1, b = 2, c = 3;
    int *ptrArr[3] = {&a, &b, &c}; // 指针数组

    for (int i = 0; i < 3; i++) {
        printf("%d ", *(ptrArr[i]));
    }

    return 0;
}

在这里插入图片描述

3.3 利用指针遍历二维数组:

指针也可以用于遍历二维数组,通过指针的偏移来访问数组的元素。
示例代码:

#include <stdio.h>

int main() {
    int arr[2][3] = {{1, 2, 3}, {4, 5, 6}};
    int *ptr = &arr[0][0]; // 指向二维数组的首元素

    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 3; j++) {
            printf("%d ", *ptr);
            ptr++; // 移动指针到下一个元素
        }
        printf("\n");
    }

    return 0;
}

这些示例代码展示了如何使用二维数组指针、指针数组以及指针来遍历二维数组。这些概念在处理多维数据结构时非常有用,使你能够更有效地操作和管理数据。

在这里插入图片描述


总结

C语言中的指针提供了强大的工具,通过了解和灵活运用指针,我们能够更有效地操作内存,实现复杂的数据结构和算法。二级指针为多级指针的概念提供了基础,而一维数组与指针的结合则在处理数组数据时提供了便捷的方式。在实际编程中,灵活运用这些概念可以让程序更加高效、清晰。
这些概念在处理多维数据结构时非常有用,使你能够更有效地操作和管理数据。

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

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

相关文章

【Hadoop】Apache Hadoop YARN

&#x1f984; 个人主页——&#x1f390;开着拖拉机回家_Linux,Java基础学习,大数据运维-CSDN博客 &#x1f390;✨&#x1f341; 感谢点赞和关注 &#xff0c;每天进步一点点&#xff01;加油&#xff01; 目录 一、YARN概述 二、YARN基础架构 2.1 ResourceManager&#x…

Java 正则表达式分组匹配

前几篇文章都是简单判断是否满足匹配规则&#xff0c;当需要提取匹配结果时就用到分组匹配。 分组匹配 可以判断是否满足正则表达式&#xff0c;然后提取出子串。 有些时候电话号码是以 123-4567-8899 这样显示的&#xff0c;我们要判断某个字符串是这种形式的并分别提起三段…

总线类设备驱动——SPI

目录 一、 SPI协议简介 二、 Linux SPI驱动 三、 SPI设备驱动范例 一、 SPI协议简介 SPI(Serial Peripheral Interface)由 Motorola 开发&#xff0c;他并不是严格意义上的标准协议但是几乎所有的厂商都遵从这一协议&#xff0c;所以可以说它是一个“事实上的”协议。SPI 是同…

学习GTEx数据库

每个个体的不同的器官组织的基因&#xff08;Gene&#xff09;都是相同的&#xff0c;但为什么有的表型为肝脏组织&#xff0c;帮助人类代谢&#xff1f;有的是肌肉组织&#xff0c;帮助人类运动&#xff1f;其原因是&#xff0c;不同的人体组织表达的基因并不相同。 &#xff…

行业安卓主板-基于RK3568/3288/3588的AI智能网络广告机/自动售货机/收银机解决方案(三)

广告机 智能网络广告机通过网络将音视频、图片、文档、网页等自由排版创建成节目发布到终端。可针对不同的终端统一管理&#xff0c;统一发布&#xff1b;针对应用场景的集中和分散&#xff0c;可以选用局域网管理和云服务器管理。 自动售货机 随着物联网、大数据、人工智能的…

2024长三角大数据产业博览会(世亚智博会)数据赋能·智创未来

2024长三角国际大数据产业博览会&#xff0c;定于3月份在沪召开&#xff0c;展会始终秉承“全球视野、国家高度、产业角度、企业立场”的办会理念&#xff0c;实现每届展会成功、圆满、精彩举办&#xff0c;集聚效应和影响力不断增强。本次展会将汇聚全球大数据产业的领军企业和…

无法加载文件 C:\Program Files\nodejs\cnpm.ps1,因为在此系统上禁止运行脚本。有

cnpm : 无法加载文件 C:\Program Files\nodejs\cnpm.ps1&#xff0c;因为在此系统上禁止运行脚本。有关详细信息&#xff0c;请参阅 https:/go.microsoft.com/fwlink/?LinkID135170 中的 about_Execution_Poli cies。 所在位置 行:1 字符: 1 cnpm run debug ~~~~ Categ…

CleanMyMac X2024永久激活码许可证

如果你拥有苹果电脑&#xff0c;那么就非常有必要在Mac上安装CleanMyMac&#xff0c;不是只有Windows才会产生垃圾&#xff0c;Mac同样的也会&#xff0c;定期清理Mac垃圾&#xff0c;可以释放磁盘空间。 CleanMyMac X 是一款流行的 Mac 清理工具&#xff0c;具有许多功能&…

paragon2024好用的NTFS工具

Mac OS X 对NTFS——Windows PC的主要文件系统——提供极少支持。您无法在NTFS分区中创建、删除或者修改文件或文件夹&#xff0c;而仅仅只能读取。Paragon NTFS for Mac官方版一直是Mac OS平台上最受欢迎的NTFS硬盘格式读取工具&#xff0c;有了NTFS for Mac &#xff0c;安装…

Leetcode41缺失的第一个正数

思路&#xff1a;原地哈希表 长度为N的数组&#xff0c;没有出现过的正整数一定是1~N1中的一个。 此时会思考能不能用一个哈希表来保存出现过的1~N1的数&#xff0c;然后从 1 开始依次枚举正整数&#xff0c;并判断其是否在哈希表中 但是题目要求常数级别的空间&#xff0c;就不…

多级缓存之JVM进程缓存

1.什么是多级缓存 传统的缓存策略一般是请求到达Tomcat后&#xff0c;先查询Redis&#xff0c;如果未命中则查询数据库&#xff0c;如图&#xff1a; 存在下面的问题&#xff1a; 请求要经过Tomcat处理&#xff0c;Tomcat的性能成为整个系统的瓶颈 Redis缓存失效时&#xff0…

新麦同城到家预约上门小程序V3全开源版 vue后端+unipp开源前端+小程序端源码安装测试教程

新麦同城预约系统&#xff0c;是近年来快速崛起并广受好评的一站式上门服务预约平台。它集合了众多服务项目&#xff0c;包括家政、维修、清洁等&#xff0c;将原本琐碎冗杂的服务流程简化&#xff0c;让你享受轻松预约、专业服务一步到位的便捷生活体验。今天就与播播资源一起…

vivado 布线分析

在“ Device ”窗口中开启“ Routing Resources ” &#xff08; 布线资源 &#xff09; 即可查看具体的布线资源。 缩小时显示抽象视图。抽象视图 &#xff1a; • 精简穿过器件的布线。 • 根据穿过特定区域的布线数量显示不同粗细的线条。 类似地 &#xff0c; 布局以块…

【MongoDB】索引 - 复合索引

一、准备工作 这里准备一些学生数据 db.students.insertMany([{ _id: 1, name: "张三", age: 20, class: { id: 1, name: "1班" }},{ _id: 2, name: "李四", age: 22, class: { id: 2, name: "2班" }},{ _id: 3, name: "王五…

【backward解决方案与原理】网络模型在梯度更新时出现变量版本号机制错误

【backward解决方案与原理】网络模型在梯度更新时出现变量版本号机制错误 报错详情 错误产生背景 原理 解决方案 RuntimeError: one of the variables needed for gradient computation has been modified by an inplace operation 报错详情 模型在backward时&#xff0c;…

数据结构与算法 | 第三章:栈与队列

本文参考网课为 数据结构与算法 1 第三章栈&#xff0c;主讲人 张铭 、王腾蛟 、赵海燕 、宋国杰 、邹磊 、黄群。 本文使用IDE为 Clion&#xff0c;开发环境 C14。 更新&#xff1a;2023 / 11 / 5 数据结构与算法 | 第三章&#xff1a;栈与队列 栈概念示例 实现顺序栈类定义…

谈谈MySQL的底层存储

这个题目启的很大&#xff0c;但其实只是最近在复习MySQL知识的一点心得&#xff0c;比较零散。 更新数据时&#xff0c;底层page的变化 下面这个图&#xff0c;我还需要解释么&#xff1f; 上面的绿色是b数的索引块&#xff0c;分别说明了101号page的最大id是7,102号page的…

ACM MM 2023 | 清华、华为联合提出MISSRec:兴趣感知的多模态序列推荐预训练

©PaperWeekly 原创 作者 | 王锦鹏 单位 | 清华大学深圳国际研究生院 研究方向 | 多模态检索、推荐系统 序列推荐是一种主流的推荐范式&#xff0c;目的是从用户的历史行为中推测用户偏好&#xff0c;并为之推荐感兴趣的物品。现有的大部分模型都是基于 ID 和类目等信息做…

相机滤镜软件Nevercenter CameraBag Photo mac中文版特点介绍

Nevercenter CameraBag Photo mac是一款相机和滤镜应用程序&#xff0c;它提供了一系列先进的滤镜、调整工具和预设&#xff0c;可以帮助用户快速地优化和编辑照片。 Nevercenter CameraBag Photo mac软件特点介绍 1. 滤镜&#xff1a;Nevercenter CameraBag Photo提供了超过2…

【嵌入式 – GD32开发实战指南(ARM版本)】第2部分 外设篇 - 第2章 温湿度传感器AHT10

1 理论分析 1.1 AHT10介绍 AHT10,新一代温湿度传感器在尺寸与智能方面建立了新的标准:它嵌入了适于回流焊的双列扁平无引脚SMD封装,底面4 x 5mm ,高度1.6mm。传感器输出经过标定的数字信号,标准I2C格式。 AHT10 配有一个全新设计的ASIC专用芯片、一个经过改进的MEMS半导体…