【带头学C++】----- 三、指针章 ---- 3.7 数组指针

3.7 数组指针

1.数组指针的概述

**数组指针是一个指向数组的指针变量,是用来保存数组元素的地址。**在C/C++中,数组名代表了数组的首地址,可以被解释为一个指向数组第一个元素的指针。因此,一个指向数组的指针可以通过数组名来获得。

例如: int arr5={10,20,30,40,50};

//需求定义一个指针变量 保存 数组元素的地址

int *ptr;

ptr = &arr0;

ptr = arr; //arr作为地址 第0个元素的地址 arr==&arr0

ptr = &arr3; //也可以保存第三个元素的地址

可以使用数组名arr来获取数组的首地址。然后,可以声明一个指向该数组的指针变量来保存这个地址:

复制代码
int *ptr = arr; // 等价于 int *ptr = &arr[0];

在上述代码中,ptr是一个指向整型的指针变量,通过将数组名arr赋值给ptr,ptr指向了数组arr的首元素,即arr[0]。

通过指针操作符*和索引,我们可以访问数组的元素。例如,要访问数组的第三个元素,可以使用以下语法:

复制代码
int value = *(ptr + 2); // 等价于 int value = arr[2];

在这里,ptr + 2将指针移动了两个长度为sizeof(int)的单位,即指向了数组的第三个元素。然后,通过解引用操作符*,我们可以获取该元素的值。

2 数组元素的指针变量 和数组名(作为地址)等价

数组指针还可以用于传递数组给函数。在函数参数中,可以将数组声明为指针或使用指针作为参数类型来接收数组。这是因为数组名会自动转换为指向数组首元素的指针。

3 在使用中 就是*()的缩写

为啥 arr ==&arr0?

&arr0 == &*(arr+0) == arr+0 == arr

案例1: p-1的值是 30 p-1 实际是代表 *(p - 1)

int arr5 = (10,20,30,40,50}; //*p指向的是40的位置

int *p = arr+3;

案例2: p1的值是 50 p1 实际是代表 *(p + 1)

int arr5 = (10,20,30,40,50};//*p指向的是40的位置

int *p = arr+3;

4 指向同一数组元素的两个

int arr(5) = {10, 20,30,40,50}; int *p1 = arr; int *p2 = arr+4;

1、两指针变量相减,等于它们间的元素个数
2、两指针变量赋值= p2=p1 它们指向同一处

3、两指针变量判断相等 == p2==p1 它们是否指向同一处

4、两指针变量判断大小 > < >= <= !=

p1>p2 p1!=p2 判断它们的位置关系

5、两指针变量不能相加(!) p1+p2无意义

相关推荐
David猪大卫7 小时前
【Linux修炼】环境变量、进程地址空间
linux·c语言·经验分享·笔记·学习·ubuntu·centos
汉克老师8 小时前
CSP-J 2026 第二轮入门组真题解析(第一题 、旅游)
c++·csp-j·信息学竞赛·小学生学c++
xiaoye-duck9 小时前
《C++ 项目:手写大模型接入 SDK》Gemini接口设计(上):初始化、全量响应实现和测试
开发语言·网络·c++·语言模型
nice_lcj52011 小时前
Java Lambda 表达式入门:怎么写、怎么用、常用方法有哪些
java·开发语言·后端·面试
码农小河6612 小时前
基于SSM+JSP+MySQL的在线医疗服务系统的设计与实现
java·开发语言·mysql
老师我太想进步了202612 小时前
【数据结构-4】算法美学之顺序表
数据结构·算法
UIU11413 小时前
P1481 魔族密码
c++·算法·动态规划
Zwawa15 小时前
两根线怎么挂住一堆设备:I2C 协议原理
c语言·单片机·嵌入式
nice_lcj52016 小时前
ThreadLocal 入门:它是怎么隔离数据的、为什么会导致内存泄漏
java·开发语言·后端·面试·并发编程·内存泄漏·threadlocal
紧跟先前的步伐16 小时前
Go AI Agent 实战 28|Agent 的预算、超时与停止条件
开发语言·人工智能·后端·ai·golang