数组和指针都是C/C++中常用的类型,它们经常会引起混淆。下面我将通过几个方面阐述数组和指针在C++中的主要区别。
一、定义方式不同
数组是一组相同类型变量的集合,通过中括号定义:
int arr[10];
指针是一个变量,用于存储另一个变量的地址:
int* p; // p是一个指针变量
二、内存分配不同
数组在栈中分配一段连续内存块:
arr: [1, 2, 3, 4]
指针只是一个地址变量,初始化时可以指向堆或栈对象。
三、访问方式不同
数组通过下标访问元素值:
int val = arr[2];
指针通过解引用操作符*访问指向对象:
int val = *p;
四、算术运算不同
对数组的算术运算是非法的。
指针支持+、-、++等算术运算,用于指针偏移。
五、参数传递不同
数组作为参数会进行值拷贝:
void func(int arr[]);
指针只传递地址,没有复制开销。
六、常见误区
数组名不是指针,但可以隐式转换为指向第一个元素的指针。
综上所述,数组与指针是不同的类型,应当理解其中的区别,才能在C++中合理应用。