C++数组衰变机制

int a [10] = {};

// 下面两个式子等价
int *p = a;
int *p = &a[0];

我们在讨论数组的时候经常看到这么一种说法,也就是说,数组名 就是 指向数组首元素的指针。

但是上面这个过程产生了隐式转换,也就是数组衰变过程

数组名 != 指针

数组就是数组,指针就是指针,不能将数组变量名认为是指针类型的。也就是说a的类型是int[10]

decltype(a); //得到的类型是int[10],而不是一个指针

我们将其当指针用的时候,发生了隐式转换。

为什么会有数组衰变

数组衰变的设计初衷是为了简化数组的操作,特别是在函数参数传递和指针运算中。数组在内存中是连续存储的,因此通过指针操作数组元素非常方便。C++通过数组衰变机制,在这些场合下自动将数组名转换为指针,以提高程序的灵活性和易用性。

posted @ 2024-10-03 13:07  wenli7363  阅读(10)  评论(0编辑  收藏  举报