08-指针与数组的结合——数组指针与指针数组的区别

news2024/9/20 20:42:23

指针与数组的结合

示例 1:指针访问数组元素

通过==指针访问数组元素=的例子:

#include <stdio.h>

int main() {
    int arr[5] = {1,2,3,4,5};
    //int *p1 = &arr;
    int *p1 = (int *)&arr;  // 需要强制类型转换
    int *p2 = arr;

    printf("*p1:%d\n", *(p1 + 1));  // 应该是访问第二个元素
    printf("*p2:%d\n", *(p2 + 1));  // 应该是访问第二个元素

    return 0;
}

在这里插入图片描述

  • p1 被初始化为数组的地址,但是由于没有进行强制类型转换,这里会有一个编译警告。通过 (int *)&arr 进行强制类型转换可以解决这个问题。
  • p2 被初始化为数组的第一个元素的地址。

示例 2:指针访问数组中的不同元素

通过指针访问数组中的不同元素:

#include <stdio.h>

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

    printf("*p2-1:%d\n", *(p2 - 1));  // 访问第二个元素
    printf("*p2:%d\n", *p2);          // 访问第三个元素
    printf("*p2+1:%d\n", *(p2 + 1));  // 访问第四个元素

    return 0;
}
  • p2 被初始化为指向数组的第三个元素。通过指针加减运算可以访问数组中的上一个和下一个元素。

示例 3:数组指针

数组指针: 专门用来指向一个数组的指针的例子:

#include <stdio.h>

int main() {
    int arr[5] = {1,2,3,4,5};
    int (*p)[5] = &arr;//定义一个 名为p 的指针,并且确定他指向的类型为int [5] ,一个拥有5个元素的整型数组
    //注意 []的优先级大于*,所以会有括号将*p括起来

    printf("arr:%p\n", &arr);
    printf("%p---%d\n", p, (*p)[2]);          // 访问第三个元素
    printf("%p---%d\n", p + 1, (*(p + 1))[2]); // 已经越界访问

    return 0;
}
  • p 是一个指向整型数组的指针,这个数组有 5 个元素。
  • p+1 实际上会跳过整个数组,导致越界访问。–>实际上是加一个p的类型,由于p是一个整型数组[5],所以会越界。

示例 4:指针数组

指针数组:专门用来存放指针的数组,称为指针数组

#include <stdio.h>

int main() {
    int a = 100;
    int b = 250;
    int c = 550;
    int d = 256;
    int e = 998;
    int *p[5] = {&a, &b, &c, &d, &e};  // 定义一个名字为 p 的数组,数组中存放的是 int 型指针

    for (size_t i = 0; i < 5; i++) {
        printf("*p[%ld]:%d \n", i, *(p[i]));  // 访问指针数组中的每个指针指向的值
    }

    return 0;
}
  • p 是一个指针数组,每个元素都是一个指向整型数据的指针。
  • 通过 *(p[i]) 可以访问每个指针指向的值。

注意事项:

  • 指针的类型决定了指针运算时的步长,int * 类型的指针步长为 4 字节(在 32 位系统中),double * 类型的指针步长为 8 字节。
  • 数组指针和指针数组是两个不同的概念。数组指针指向一个数组,指针数组是一个数组,数组的元素是指针。
  • 指针运算时要确保不越界访问,否则会导致不可预测的行为甚至崩溃。

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

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

相关文章

【SQL】牛客网SQL非技术入门40道代码|练习记录

跟着刷题&#xff1a;是橘长不是局长哦_哔哩哔哩_bilibili 6查询学校是北大的学生信息 select device_id, university from user_profile where university 北京大学 7查找年龄大于24岁的用户信息 select device_id, gender, age, university from user_profile where age…

大模型训练的艺术:从预训练到增强学习的四阶段之旅

文章目录 大模型训练的艺术&#xff1a;从预训练到增强学习的四阶段之旅1. 预训练阶段&#xff08;Pretraining&#xff09;2. 监督微调阶段&#xff08;Supervised Finetuning, SFT&#xff09;3. 奖励模型训练阶段&#xff08;Reward Modeling&#xff09;4. 增强学习微调阶段…

关于 Redis 中集群

哨兵机制中总结到&#xff0c;它并不能解决存储容量不够的问题&#xff0c;但是集群能。 广义的集群&#xff1a;只要有多个机器&#xff0c;构成了分布式系统&#xff0c;都可以称之为一个“集群”&#xff0c;例如主从结构中的哨兵模式。 狭义的集群&#xff1a;redis 提供的…

C++~~期末复习题目讲解---lijiajia版本

目录 1.类和对象 &#xff08;3&#xff09;创建对象的个数 &#xff08;3&#xff09;全局变量&#xff0c;局部变量 &#xff08;4&#xff09;构造函数的执行次数 &#xff08;5&#xff09;静态动态析构和构造顺序 &#xff08;6&#xff09;初始化顺序和声明顺序 &a…

Postman环境变量以及设置token全局变量!

前言百度百科解释&#xff1a; 环境变量&#xff08;environment variables&#xff09;一般是指在操作系统中用来指定操作系统运行环境的一些参数&#xff0c;如&#xff1a;临时文件夹位置和系统文件夹位置等。 环境变量是在操作系统中一个具有特定名字的对象&#xff0c;它…

【微服务】springcloud-alibaba 配置多环境管理使用详解

目录 一、前言 二、配置多环境问题概述 2.1 什么是微服务多环境配置管理 2.1.1 微服务多环境配置管理问题起源 2.2 为什么要做多环境配置管理 2.3 微服务多环境配置管理解决方案 三、springboot 配置多环境管理解决方案 3.1 前置准备 3.1.1 搭建一个springboot工程 3.…

第五十六周:文献阅读

目录 摘要 Abstract 文献阅读&#xff1a;应用于地表水总磷浓度预测的可解释CEEMDAN-FE-LSTM-Transformer混合模型 一、现有问题 二、提出方法 三、方法论 1、CEEMDAN&#xff08;带自适应噪声的完全包络经验模式分解&#xff09; 2、FE&#xff08;模糊熵 &#xff09…

k8s离线部署Calico网络(2续)

下载离线镜像 百度网盘 链接&#xff1a;https://pan.baidu.com/s/14ReJW-ZyYZFLbwSEBZK6mA?pwdi6ct 提取码&#xff1a;i6ct 1.将离线镜像上传至所有服务器并解压&#xff1a; [rootmaster ~]# tar xf calico.tar.gz [rootmaster ~]# cd calico 2.所有服务器使用for循环导入…

Python 基础语法详解(三)

Python 基础语法详解&#xff08;三&#xff09; Python 运算符Python 算术运算符①理论讲解&#xff1a;②实操讲解&#xff1a; Python 比较运算符①理论讲解&#xff1a;②实操讲解&#xff1a; Python 赋值运算符Python 位运算符①理论讲解&#xff1a;②实操讲解&#xff…

JVM学习-JVM运行时参数

JVM参数选项 标准参数选项 特点 稳定&#xff0c;后续版本不会变化以【-】开头 各种选项 运行java或者java -help可以看到所有的标准选项 补充内容 -server&#xff1a;64位机器上只支持Server模式的JVM&#xff0c;适用于需要大内存的应用程序&#xff0c;默认用并行垃圾回…

【微信小程序】事件传参的两种方式

文章目录 1.什么是事件传参2.data-*方式传参3.mark自定义数据 1.什么是事件传参 事件传参:在触发事件时&#xff0c;将一些数据作为参数传递给事件处理函数的过程&#xff0c;就是事件传参 在微信小程序中&#xff0c;我们经常会在组件上添加一些自定义数据&#xff0c;然后在…

【前端】使用window.print() 前端实现网页打印详细教程(含代码示例)

&#x1f60e; 作者介绍&#xff1a;我是程序员洲洲&#xff0c;一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主。 &#x1f913; 同时欢迎大家关注其他专栏&#xff0c;我将分享Web前后端开发、人工智能、机器学习、深…

云服务平台仿真-身份认证/授权/申请和释放IT资源[云计算3]

实验名称 云服务平台仿真--身份认证/授权/申请和释放IT资源 实验目的 通过CloudSim仿真&#xff0c;熟悉云服务平台的构建。通过CloudSim仿真&#xff0c;熟悉各种云机制在云服务中的实现原理。 实验原理 CloudSim可以模拟云服务的各类底层方法。在省略技术细节的前提下&a…

tkinter菜单栏

tkinter菜单栏 菜单栏效果代码 菜单栏 在 Tkinter 中&#xff0c;Menu 组件用于创建菜单栏、下拉菜单和上下文菜单&#xff0c;是构建图形用户界面&#xff08;GUI&#xff09;应用程序的常见需求。 效果 代码 import tkinter as tk from tkinter import messagebox# 创建主…

linux安装jdk + docker+dockercompose+aliyunACR

下载安装包 链接&#xff1a;https://pan.baidu.com/s/1AyFvPA5qwy4IxfZoTQohrQ 提取码&#xff1a;6666 安装jdk jdk-8u411-linux-x64.tar.gz 链接&#xff1a;https://pan.baidu.com/s/1BZ7J4L5PY-9nuQyxBMDGTA 提取码&#xff1a;6666 1、解压jdk tar -xvf jdk-8u411-li…

上市公司短视主义数据集(2001-2022年)

数据简介&#xff1a;上市公司短视主义是指公司管理层过于关注短期业绩和股价表现&#xff0c;而忽视公司的长期发展和战略规划。这种短视行为可能会导致公司投资决策的失误&#xff0c;影响公司的长期竞争力。 在上市公司年度报告年度中&#xff0c;通过已有的反映管理者“短…

SpringBoot的Mybatis-plus实战之基础知识

文章目录 MybatisPlus 介绍一、MyBatisPlus 集成步骤第一步、引入依赖第二步、定义mapper 二、注解TableNameTableldTableField 三、配置文件四、加解密实现步骤 在SpringBoot项目中使用Mybatis-plus&#xff0c;记录下来&#xff0c;方便备查。 MybatisPlus 介绍 为简化开发而…

C语言 图形化界面方式连接MySQL【C/C++】【图形化界面组件分享】

博客主页&#xff1a;花果山~程序猿-CSDN博客 文章分栏&#xff1a;MySQL之旅_花果山~程序猿的博客-CSDN博客 关注我一起学习&#xff0c;一起进步&#xff0c;一起探索编程的无限可能吧&#xff01;让我们一起努力&#xff0c;一起成长&#xff01; 目录 一.配置开发环境 二…

晨控CK-UR12-E01与欧姆龙NX/NJ系列EtherNet/IP通讯手册

晨控CK-UR12-E01与欧姆龙NX/NJ系列EtherNet/IP通讯手册 晨控CK-UR12-E01 是天线一体式超高频读写器头&#xff0c;工作频率默认为902MHz&#xff5e;928MHz&#xff0c;符合EPC Global Class l Gen 2&#xff0f;IS0-18000-6C 标准&#xff0c;最大输出功率 33dBm。读卡器同时…

41 mysql subquery 的实现

前言 sub query 是一个我们经常会使用到的一个 用法 我们这里 看一看各个场景下面的 sub query 的相关处理 查看 本文, 需要 先看一下 join 的相关处理 测试数据表如下, 两张测试表, tz_test, tz_test03, 表结构 一致 CREATE TABLE tz_test (id int(11) unsigned NOT NUL…