C++数组衰变机制
int a [10] = {};
// 下面两个式子等价
int *p = a;
int *p = &a[0];
我们在讨论数组的时候经常看到这么一种说法,也就是说,数组名 就是 指向数组首元素的指针。
但是上面这个过程产生了隐式转换,也就是数组衰变过程
数组名 != 指针
数组就是数组,指针就是指针,不能将数组变量名认为是指针类型的。也就是说a的类型是int[10]
decltype(a); //得到的类型是int[10],而不是一个指针
我们将其当指针用的时候,发生了隐式转换。
为什么会有数组衰变
数组衰变的设计初衷是为了简化数组的操作,特别是在函数参数传递和指针运算中。数组在内存中是连续存储的,因此通过指针操作数组元素非常方便。C++通过数组衰变机制,在这些场合下自动将数组名转换为指针,以提高程序的灵活性和易用性。