值得一看
广告
彩虹云商城
广告

热门广告位

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

数组名是指向首元素的指针常量,不可赋值,保留类型和长度信息;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 是指针,但它完全以数组方式使用。

百度文心百中

百度文心百中

百度大模型语义搜索体验中心

百度文心百中23

查看详情
百度文心百中

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

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


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),体现数组指针的步长特性。

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

相关标签:

字节 c++ 区别 作用域 c++数组 常量 int 指针 作用域

大家都在看:

C++字符串字面量与字符常量区别
如何在C++中将字符串转换为整数_C++字符串转整数实现方法
C++如何逐字符读取文件内容
C++初学者如何编写小游戏井字棋
C++字符数组与指针遍历技巧
温馨提示: 本文最后更新于2025-09-19 16:29:50,某些文章具有时效性,若有错误或已失效,请在下方留言或联系在线客服
文章版权声明 1 本网站名称: 创客网
2 本站永久网址:https://new.ie310.com
1 本文采用非商业性使用-相同方式共享 4.0 国际许可协议[CC BY-NC-SA]进行授权
2 本站所有内容仅供参考,分享出来是为了可以给大家提供新的思路。
3 互联网转载资源会有一些其他联系方式,请大家不要盲目相信,被骗本站概不负责!
4 本网站只做项目揭秘,无法一对一教学指导,每篇文章内都含项目全套的教程讲解,请仔细阅读。
5 本站分享的所有平台仅供展示,本站不对平台真实性负责,站长建议大家自己根据项目关键词自己选择平台。
6 因为文章发布时间和您阅读文章时间存在时间差,所以有些项目红利期可能已经过了,能不能赚钱需要自己判断。
7 本网站仅做资源分享,不做任何收益保障,创业公司上收费几百上千的项目我免费分享出来的,希望大家可以认真学习。
8 本站所有资料均来自互联网公开分享,并不代表本站立场,如不慎侵犯到您的版权利益,请联系79283999@qq.com删除。

本站资料仅供学习交流使用请勿商业运营,严禁从事违法,侵权等任何非法活动,否则后果自负!
THE END
喜欢就支持一下吧
点赞10赞赏 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容