在C++编程中,C++指针与数组的关系是一个既基础又容易混淆的概念。很多初学者常常搞不清楚指针和数组到底是不是一回事。今天,我们就用通俗易懂的方式,带大家彻底搞懂C++数组指针关系,让你轻松掌握这一核心知识点。
在C++中,数组是一段连续的内存空间,用于存储相同类型的数据。例如:
int arr[5] = {10, 20, 30, 40, 50}; 上面这行代码定义了一个包含5个整数的数组 arr。系统会为它分配连续的20字节内存(假设int占4字节)。
指针是一个变量,它存储的是另一个变量的内存地址。例如:
int x = 100;int* p = &x; // p 存储的是 x 的地址
现在,p 就是一个指向整型变量的指针。
这是理解C++指针与数组关系的关键点:在大多数情况下,数组名会被解释为指向其第一个元素的指针。
例如,对于数组 arr,arr 等价于 &arr[0],即第一个元素的地址。
我们来看一个例子:
#include <iostream>using namespace std;int main() { int arr[3] = {1, 2, 3}; cout << "arr 的值(地址): " << arr << endl; cout << "&arr[0] 的地址: " << &arr[0] << endl; int* p = arr; // 合法!数组名可赋值给指针 cout << "*p 的值: " << *p << endl; // 输出 1 return 0;}
运行结果会显示:arr 和 &arr[0] 的地址完全相同!这说明数组名确实可以当作指针使用。
你可能不知道,在C++中,arr[i] 其实等价于 *(arr + i)!
// 以下两行完全等价:cout << arr[2] << endl;cout << *(arr + 2) << endl;
甚至更神奇的是:2[arr] 在语法上也是合法的!因为加法满足交换律,arr + 2 和 2 + arr 是一样的。不过这种写法不推荐,只是为了说明底层原理。
虽然数组名可以当作指针用,但它们并不完全相同。主要区别如下:
sizeof 返回整个数组的字节数;对指针使用则返回指针本身的大小(通常是8字节)。arr = p; 是非法的),但指针变量可以重新赋值。int arr[4] = {1, 2, 3, 4};int* p = arr;cout << "sizeof(arr): " << sizeof(arr) << endl; // 输出 16(4个int)cout << "sizeof(p): " << sizeof(p) << endl; // 输出 8(64位系统)
理解C++指针与数组的关系,是学习C++乃至C语言的重要基石。记住以下几点:
arr[i] 与 *(arr + i) 完全等价。sizeof、可赋值性等方面有本质区别。希望这篇C++指针教程能帮你扫清疑惑。多写代码、多调试,你会越来越熟练!
如果你觉得有用,不妨动手试试文中的代码,观察输出结果,加深理解。祝你在C++编程基础的学习路上越走越远!
本文由主机测评网于2025-12-16发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025128363.html