逍遥自在学C语言 | 指针和数组的关联

news2025/5/16 6:23:00

前言

指针和数组之间存在着紧密的关系。在本文中,我们将探讨指针和数组的关系、指针算术和数组遍历、多维数组与指针以及指针数组和数组指针。

一、人物简介

  • 第一位闪亮登场,有请今后会一直教我们C语言的老师 —— 自在。

  • 第二位上场的是和我们一起学习的小白程序猿 —— 逍遥。

二、指针和数组的关系

  • 在C语言中,数组名是指向数组首元素的指针。

  • 示例代码:

#include <stdio.h>

int main() {
    int arr[5] = {1, 2, 3, 4, 5};
    int *ptr = arr; // 数组名作为指针使用
    
    // 使用指针访问数组元素
    printf("ptr指向 %d \n", *ptr);
    return 0;
}

  • 在上述示例中,我们将数组名arr赋给指针ptr,并使用*ptr访问数组的第一个元素。

  • 输出结果

ptr指向 1

三、指针算术和数组遍历

  • 指针算术允许我们通过增加或减少指针的值来访问数组中的不同元素。
  • 通过改变ptr的值,实现对数组的遍历
  • 示例代码:
#include <stdio.h>

int main() {
    int arr[5] = {1, 2, 3, 4, 5};
    int *ptr = arr;

    // 使用指针算术访问数组元素
    for (int i = 0; i < 5; i++) {
        printf("ptr指向 %d \n", *(ptr + i));
    }

    return 0;
}

  • 输出结果
ptr指向 1
ptr指向 2
ptr指向 3
ptr指向 4
ptr指向 5

四、多维数组与指针

  • C语言中支持多维数组,我们同样可以使用指针来访问多维数组的元素。

  • 示例代码:

#include <stdio.h>

int main() {
    int arr[3][2] = {{1, 2}, {3, 4}, {5, 6}};
    int (*ptr)[2] = arr;

    // 使用指针访问多维数组元素
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 2; j++) {
            printf("%d ", *(*(ptr + i) + j));
        }
        printf("\n");
    }

    return 0;
}

  • 我们定义了一个二维数组arr,并将其赋给指针ptr

  • 通过使用指针算术和双重指针解引用,访问了多维数组中的每个元素。

  • 输出结果

1 2
3 4
5 6

五、指针数组和数组指针

  • 指针数组是一个数组,其元素都是指针类型;
  • 数组指针是一个指针,指向一个数组。
  • 示例代码:
#include <stdio.h>

int main() {
    int arr1[] = {1, 2, 3, 4, 5};  // 数组
    int *arr2[5];  // 指针数组
    int (*arr3)[5];  // 数组指针

    int i;

    // 初始化指针数组
    for (i = 0; i < 5; i++) {
        arr2[i] = &arr1[i];
    }

    // 打印指针数组中的元素
    printf("指针数组中的元素:\n");
    for (i = 0; i < 5; i++) {
        printf("%d ", *arr2[i]);
    }

    // 初始化数组指针
    arr3 = &arr1;

    // 打印数组指针指向的数组中的元素
    printf("\n数组指针指向的数组中的元素:\n");
    for (i = 0; i < 5; i++) {
        printf("%d ", (*arr3)[i]);
    }

    return 0;
}
  • 我们定义了一个整型数组arr1,一个指针数组arr2和一个数组指针arr3

  • 指针数组arr2是一个包含5个元素的数组,每个元素都是一个指向整型变量的指针。

  • 我们使用arr2[i] = &arr1[i]将指针数组的每个元素指向arr1数组的对应元素。

  • 然后,我们通过*arr2[i]解引用指针数组中的每个元素,并打印出其值。

  • 数组指针arr3是一个指向包含5个整型元素的数组的指针。

  • 我们通过arr3 = &arr1将数组指针指向arr1数组。

  • 然后,通过(*arr3)[i]访问数组指针所指向的数组中的每个元素,并打印出其值。

  • 输出结果

指针数组中的元素:
1 2 3 4 5
数组指针指向的数组中的元素:
1 2 3 4 5

小结

通过这篇文章,我们学会了

1、利用指针访问和遍历数组

2、指针数组和数组指针的区别

📢欢迎各位 👍点赞 ⭐收藏 📝评论,如有错误请留言指正,非常感谢!

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

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

相关文章

车友俱乐部APP小程序系统开发功能有哪些?

车友俱乐部APP小程序系统开发功能有哪些&#xff1f; 1、用户注册&#xff1a;用户首次使用需要使用个人信息进行注册&#xff0c;创建自己的账户并登录才能使用汽车俱乐部APP小程序系统所提供的各项服务。 2、品牌分类&#xff1a;车友俱乐部根据汽车品牌的不同…

6.16 map和set接口

目录 1 Map接口1.2 特点1.3 继承结构1.4 常用方法1.5 练习&#xff1a;Map常用方法测试2 HashMap2.3 练习&#xff1a;获取HashMap的数据2.4 练习&#xff1a;字符串中字符统计3、 set接口3.1 概述3.2 Set集合的特点3.3 常用方法3.4 HashSet3.5 练习: Set相关测试3.6 练习: Set…

项目管理中,优秀的项目经理必须要善于制定目标

在项目管理中&#xff0c;就像船在大海上航行需要灯塔的指引一样&#xff0c;团队也需要明确的目标来指引前进方向。目标不仅仅是为了指引方向&#xff0c;更是凝聚人心的力量。因此&#xff0c;一个优秀的项目经理必须要善于制定目标&#xff0c;让员工为目标干活&#xff0c;…

云原生安全联防联抗策略玩转微隔离

前言 随着信息技术的发展、互联网的快速普及&#xff0c;越来越多的信息被存储在云端&#xff0c;企业面临的安全问题也日益突出。在《网络安全法》、《数据安全法》等多部法律法规要求下&#xff0c;各行业用户纷纷设立安全部门。不管安全部门里是“一人当关”还是“三三两两…

尖峰平谷电表

尖峰平谷电表是一种新型的电能表&#xff0c;可以分别测量电力资源的尖峰、峰、平、谷和深谷等不同时段的用电量和用电负荷。这种电表的出现是为了帮助电力公司实现节能减排和精细管理的目标&#xff0c;同时也能够帮助用户合理使用电力资源&#xff0c;降低用电浪费和碳排放。…

基于SSM的在线考试系统

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 在线考试借助于网络来…

7个银行的软件测试项目实战,别再说简历项目不知道怎么写了

目录 前言 项目描述1&#xff1a;上海华瑞银行直连票据项目 项目描述2&#xff1a;平安金服风控中台系统 项目描述3&#xff1a;众安创展APP项目 项 目4&#xff1a; 招商银行VTM自助渠道服务系统 项 目5&#xff1a;招商银行票据支付 项 目6&#xff1a; 平安银行风控系…

6.9关键字static,final的使用

关键字&#xff1a;static 概念 是java中的一个关键字 用于修饰成员&#xff08;成员变量和成员方法&#xff09; 类属性、类方法的设计思想 概念&#xff1a; 当我们编写一个类时&#xff0c;其实就是在描述其对象的属性和行为&#xff0c;而并没有产生实 质上的对象&#x…

带启动参数的启动idea

-Dspring.profiles.activedev -Dserver.addr192.168.1.153:8848

立即修复!华硕曝路由器的关键漏洞

近日&#xff0c;华硕针对多种路由器型号的漏洞&#xff0c;发布了安全固件更新&#xff0c;并敦促客户立即更新设备或限制WAN访问&#xff0c;以保证其设备安全。 华硕方面表示&#xff0c;新发布的固件中包含九个安全漏洞的修复程序&#xff0c;包括高漏洞和关键漏洞。其中最…

ZYNQ——锁相环(PLL)实验

文章目录 一、介绍二、添加时钟 IP三、设计源代码四、仿真测试五、添加 ILA IP六、分配引脚七、板上验证八、示波器输出九、问题汇总 一、介绍 ZYNQ开发板上只有一个50MHz的时钟输入&#xff0c;如果要用到其他频率的时钟&#xff0c;就需要通过FPGA芯片内部集成的PLL(Phase L…

认识磁盘及磁盘的读写原理

认识磁盘 磁盘是计算机主要的存储介质&#xff0c;可以存储大量的二进制数据&#xff0c;并且断电后也能保持数据不丢失。早期计算机使用的磁盘是软磁盘&#xff08;Floppy Disk&#xff0c;简称软盘&#xff09;&#xff0c;如今常用的磁盘是硬磁盘&#xff08;Hard disk&…

linux centos Python + Selenium+Chrome自动化测试环境搭建?

在 CentOS 系统上搭建 Python Selenium Chrome 自动化测试环境&#xff0c;需要执行以下步骤&#xff1a; 1、安装 Python CentOS 7 自带的 Python 版本较老&#xff0c;建议使用 EPEL 库或源码安装 Python 3。例如&#xff0c;使用 EPEL 库安装 Python 3&#xff1a; sud…

【C语言初阶】循环语句的具体用法,有这篇博客就够了

君兮_的个人主页 勤时当勉励 岁月不待人 C/C 游戏开发 Hello米娜桑&#xff0c;这里是君兮_&#xff0c;今天又抽空为大家更新我们的主线0基础C语言啦&#xff01;今天要将的内容是循环语句的具体用法。同时如果你是0基础小白的话&#xff0c;建议先看看下面两篇博客哦&#…

普通人接了人生第一单

大家好&#xff0c;我是 “秋意零” &#xff0c;全网同名&#xff08;某平台多了一个数字0 “如&#xff1a;秋意零0”&#xff09;。 你&#xff0c;相信天上掉馅饼吗&#xff1f; 40 分钟赚 150 你敢信&#xff1f; 现在我突然有点信了&#xff0c;为什么呢&#xff1f;请…

ESP-C3入门19. RSA算法加密、解密的实现

ESP-C3入门19. RSA算法加密、解密的实现 一、概述二、重要函数1. mbedtls_pk_parse_public_key和mbedtls_pk_parse_key函数原型&#xff1a;函数参数&#xff1a; 2. mbedtls_pk_encrypt函数原型&#xff1a;函数参数&#xff1a;函数功能&#xff1a; 三、实现过程1. CMakeLis…

@Param注解的用法

1、使用Param注解的原因 在 Mapper接口中&#xff0c;当方法的参数为多个字面量类型&#xff0c;此时mybatis会将这些参数存储在一个Map集合中&#xff0c;以两种方式进行存储 1、以arg0.arg1…为键&#xff0c;以参数为值2、以param1&#xff0c;param2…为键&#xff0c;以…

解读Linux常用命令使用方法

文章目录 1.前言1.1 定义1.2 特点 2.常用命令介绍2.1 ls2.2 pwd2.3 cd2.4 touch2.5 cat2.6 mkdir2.7 rm2.8 cp2.9 mv2.10 man&#xff08;联机手册&#xff09;2.11 vim2.12 grep2.13 ps2.14 netstat 1.前言 1.1 定义 Linux是一套免费使用和自由传播的类Unix操作系统&#xf…

【百套源码】HTML5期末大作业 - 各类网页作业源码合集

文章目录 持续更新文章记录1️⃣ 个人介绍类相关源码1.1 html实现个人简历1.2 科技风个人简历1.3 网站风个人简历1.4 多种风格个人主页模板1.5 html好看的个人简历明星版1.6 专属个人主页-系列11.7 专属个人主页-系列21.8 专属个人主页-系列31.9 专属个人主页-系列41.10 专属个…

uniapp和springboot微信小程序开发实战:前端架构之微信小程序主页实现

文章目录 主页效果前端代码后端实现主页效果 前端代码 具体代码实现如下: <template><view><!--首页轮播图--><view class="uni-banner-wrap"><swiper class="swiper" circular :indicator-dots="indicatorDots" …