0

0

C++数组与指针的关系解析

P粉602998670

P粉602998670

发布时间:2025-09-19 15:54:01

|

522人浏览过

|

来源于php中文网

原创

数组名是指向首元素的指针常量,不可赋值,保留类型和长度信息;2. 指针可指向数组并用下标访问元素,但sizeof运算结果不同,体现本质区别。

c++数组与指针的关系解析

在C++中,数组和指针看似相似,实则有本质区别,但又紧密关联。理解它们之间的关系对掌握内存操作和高效编程至关重要。很多人容易混淆两者,尤其是在函数传参或动态内存处理时。下面从几个关键角度解析数组与指针的关系。

数组名的本质是指针常量

定义一个数组时,如:

int arr[5] = {1, 2, 3, 4, 5};

数组名 arr 在大多数表达式中会被自动转换为指向其首元素的指针,即 &arr[0]。这意味着:

  • arr 的值是首元素地址
  • arr 不能被赋值(它是常量指针)
  • sizeof(arr) 得到的是整个数组的字节大小,而不是指针的大小

例如,在32位系统中,sizeof(arr) 是 20(5个int),而 sizeof(int*) 是 4。这说明数组名不是普通指针,它保留了类型信息和长度信息(在作用域内)。

立即学习C++免费学习笔记(深入)”;

指针可以指向数组并模拟数组访问

指针可以通过下标或偏移访问数组元素。例如:

int* p = arr; // p 指向 arr 首元素
cout cout

这种等价性源于C++的地址运算规则:p[i] 等价于 *(p + i)。因此,只要指针指向一段连续内存,就可以像数组一样使用。

动态分配数组时更是如此:

int* dyn_arr = new int[5];
dyn_arr[0] = 10;

这里 dyn_arr 是指针,但它完全以数组方式使用。

云点滴客户关系管理CRM OA系统
云点滴客户关系管理CRM OA系统

云点滴客户解决方案是针对中小企业量身制定的具有简单易用、功能强大、永久免费使用、终身升级维护的智能化客户解决方案。依托功能强大、安全稳定的阿里云平 台,性价比高、扩展性好、安全性高、稳定性好。高内聚低耦合的模块化设计,使得每个模块最大限度的满足需求,相关模块的组合能满足用户的一系列要求。简单 易用的云备份使得用户随时随地简单、安全、可靠的备份客户信息。功能强大的报表统计使得用户大数据分析变的简单,

下载

函数参数中数组退化为指针

当数组作为函数参数传递时,会“退化”为指针。例如:

void func(int arr[]) { }
// 等同于
void func(int* arr) { }

这意味着在函数内部无法通过 sizeof(arr) 获取数组真实长度,因为此时 arr 是指针。必须额外传入长度参数:

void printArray(int* arr, int size) {
  for (int i = 0; i     cout }

这也是为什么推荐使用 std::vector 或 std::array 的原因之一——它们能携带大小信息。

数组指针与指针数组的区别

理解以下两种声明有助于深入掌握关系:

  • int (*ptr)[5]; —— ptr 是指向含有5个int的数组的指针
  • int* arr[5]; —— arr 是包含5个int指针的数组

前者可用于多维数组处理,例如:

int matrix[3][5];
int (*p)[5] = matrix; // p 指向二维数组的第一行

每次 p++ 会跳过一整行(5个int),体现数组指针的步长特性。

基本上就这些。数组和指针在语法层面高度兼容,但在语义和行为上各有特点。掌握它们的转换规则和限制,能避免常见错误,写出更清晰、安全的代码。

相关专题

更多
java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1468

2023.10.24

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

318

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

538

2024.08.29

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

52

2025.08.29

C++中int的含义
C++中int的含义

本专题整合了C++中int相关内容,阅读专题下面的文章了解更多详细内容。

197

2025.08.29

PHP WebSocket 实时通信开发
PHP WebSocket 实时通信开发

本专题系统讲解 PHP 在实时通信与长连接场景中的应用实践,涵盖 WebSocket 协议原理、服务端连接管理、消息推送机制、心跳检测、断线重连以及与前端的实时交互实现。通过聊天系统、实时通知等案例,帮助开发者掌握 使用 PHP 构建实时通信与推送服务的完整开发流程,适用于即时消息与高互动性应用场景。

11

2026.01.19

微信聊天记录删除恢复导出教程汇总
微信聊天记录删除恢复导出教程汇总

本专题整合了微信聊天记录相关教程大全,阅读专题下面的文章了解更多详细内容。

79

2026.01.18

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

109

2026.01.16

全民K歌得高分教程大全
全民K歌得高分教程大全

本专题整合了全民K歌得高分技巧汇总,阅读专题下面的文章了解更多详细内容。

153

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
CSS3 教程
CSS3 教程

共18课时 | 4.7万人学习

Sass 教程
Sass 教程

共14课时 | 0.8万人学习

Pandas 教程
Pandas 教程

共15课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号