news 2026/5/23 14:26:49

C++ 数组指针和数组元素指针

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C++ 数组指针和数组元素指针

数组指针:

int temp[5] = { 2, 3, 4, 5, 6 }; int (*p)[5] = &temp; int i; for (i = 0; i < 5; i++) { printf("%d\n", *(*p + i)); //等同 printf("%d\n", (*p)[i]); }

输出:

p 是一个指向“包含5个int的数组”的指针
  • temp的类型是int[5](数组类型)

  • &temp的类型是int(*)[5](指向数组的指针)

  • p就是这种指针

所以:

  • p指向整个数组 temp(而不是第一个元素)

  • *p等价于temp(数组本身)


解释*(*p + i)
  • *p→ 得到数组temp(在表达式中退化为指向首元素的指针&temp[0]

  • *p + i→ 指针向后移动 i 个元素,指向temp[i]地址

所以*p + i是指向数组中第 i 个元素的位置(地址)

  • *(*p + i)→ 取出该地址的值,等价于temp[i]

数组元素指针

int temp[5] = { 2, 3, 4, 5, 6 }; int (*p) = temp;//temp 与 &temp[0] 同义 int i; for (i = 0; i < 5; i++) { printf("%d\n", *(p + i)); }

输出:

指针变量加1,即向后移动1 个位置表示指针变量指向下一个数据元素的首地址。

p指向的是一个整型,p+1就是移动一个整型大小,即移动4个字节,所以p+1代表的地址比p代表的地址大4。

*(p + i) 就是取出对应地址的数据元素的值。

延申

根据 ’指针+1‘ 的运算原理,可做以下改动:

int temp[5] = { 2, 3, 4, 5, 6 }; int (*p)[5] = &temp; int i; for (i = 0; i < 5; i++) { printf("%d\n", *(p + i)); }

输出:

  • p数组指针,指向长度为 5 的 int 数组
  • p + i跳过 i 个完整数组
    • 每次 +1,直接跳过5 个 int
  • *(p + i):解引用后得到的是第 i 个数组的首地址,不是数组元素!

p指向的是拥有5个int元素的数组。拥有5个int元素的数组的数据大小为:5*4 = 20 字节;

p+i 就是 地址加上 i*20 ;


综合扩展

这里分析以下最后一个输出:*(*(&arr + 1) - 1)

int arr[3] = {1, 2, 3}; // 步骤1: &arr + 1 // &arr 是 int(*)[3] 类型,加 1 跳过整个数组(12 字节) // 假设 arr 起始地址为 0x1000,则 &arr+1 = 0x100C // 步骤2: *(&arr + 1) // 解引用 int(*)[3] 得到 int[3] 类型 // 此时 *(&arr+1) 在概念上代表"从 0x100C 开始的一个 int[3] 数组" // 但这个数组实际上并不存在(越界了),只是类型系统允许这样表达 // 步骤3: 数组名转换 // 当 *(&arr+1) 作为右值使用时,它从 int[3] 转换为 int* // 转换后得到指向"这个不存在的数组"的首元素的指针 // 也就是指向地址 0x100C 的 int* 指针 // 步骤4: -1 // int* 指针减 1,向前移动 sizeof(int) = 4 字节 // 得到地址 0x100C - 4 = 0x1008 // 0x1008 正好是 arr[2] 的地址 // 步骤5: * 解引用 // 获取 arr[2] 的地址 对应的元素数值
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/23 14:25:41

你的第一个Agent:20分钟完成一个能用的助手

理论讲了三篇&#xff0c;今天开始动手。 我们要写一个"知识库问答Agent"——用户提问&#xff0c;Agent检索知识库&#xff0c;返回答案。这是最经典的Agent场景&#xff0c;也是入门的最佳选择。 20分钟&#xff0c;从零到能运行。我们用LangGraph框架&#xff0c;…

作者头像 李华
网站建设 2026/4/1 14:25:08

京东茅台自动抢购终极指南:3步实现高效抢购自动化

京东茅台自动抢购终极指南&#xff1a;3步实现高效抢购自动化 【免费下载链接】jd_maotai 抢京东茅台脚本&#xff0c;定时自动触发&#xff0c;自动预约&#xff0c;自动停止 项目地址: https://gitcode.com/gh_mirrors/jd/jd_maotai 对于众多茅台爱好者来说&#xff0…

作者头像 李华
网站建设 2026/4/7 16:28:42

2025届最火的五大降AI率平台解析与推荐

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 人工智能助力开题报告撰写&#xff0c;已然成了提高学术写作效率的关键途径了。于选题阶段之…

作者头像 李华
网站建设 2026/4/5 15:04:05

横向评测:东莞地区主流 AI 培训企业实力对比

引言在当今数字化时代&#xff0c;AI 技术的发展日新月异&#xff0c;其应用范围也越来越广泛。东莞作为制造业名城&#xff0c;众多企业和创业者对 AI 技术的需求日益增长。然而&#xff0c;企业端面临着缺乏数字化运营团队、不懂 AI 工具使用、短视频内容生产效率低等问题&am…

作者头像 李华
网站建设 2026/4/8 0:45:03

使用C#代码在 PowerPoint 中突出显示文本

在制作 PowerPoint 演示文稿时&#xff0c;你可能希望确保某些重要内容能够吸引观众的注意力。将文本用亮色标注是一种简单而有效的方法&#xff0c;可以让内容更加突出和醒目。本文将演示如何使用 Spire.Presentation for .NET 在 C# 和 VB.NET 中实现 PowerPoint 文本高亮效果…

作者头像 李华