数组名称和指向第一个元素的另一个指针有什么区别?

Dhr*_*ick 1 c++ arrays pointers

有一个数组A,定义为int A[10],并且有另一个包含基址的指针,定义为int *ptr = A.

我最近看过这篇文章 如何找到'sizeof'(一个指向数组的指针)?,我无法弄清楚A和ptr之间的区别是什么.他们俩都不只是拥有阵列的基地址吗?

我们A[i] and ptr[i]现在可以互换使用,对于一些小于10的整数.

那么为什么使用sizeof()得到的结果有所不同?

Che*_*Alf 5

该数组是一个数组.数组是内存中连续的项目序列.对于阵列Ñ项由所报告的尺寸sizeofÑ 每个项目的大小倍.

指针是一个指针.指针值(实际上)是某事物的存储器地址.指针的大小基本上是内存地址的大小.

在某些上下文中,引用数组的表达式衰减到指向数组的第一项的指针,并且结合支持例如与指针一起使用的索引符号,可以使指针看起来类似于数组.当您通过引用传递数组或将其用作参数时sizeof,衰变不会发生,但是当您例如向数组添加整数时会发生衰变,例如"Hello"+2.这对于这样的数组没有意义,因此数组表达式衰减(到可以作为内置参数的指针类型+).

最重要的是,在某些上下文中,数组类型被调整为指针类型.例如,具有签名的函数void foo(int a[42]);调整void foo(int* a);.这意味着可以使用任何指针调用该函数int,无论它是否指向数组中的元素.数组衰减意味着您可以调用函数传递数组的名称,但a函数的类型是int*.