作者:oDavid_仔o_880 | 来源:互联网 | 2023-05-24 00:35
有一个数组A,定义为int A[10]
,并且有另一个包含基址的指针,定义为int *ptr = A
.
我最近看过这篇文章
如何找到'sizeof'(一个指向数组的指针)?,我无法弄清楚A和ptr之间的区别是什么.他们俩都不只是拥有阵列的基地址吗?
我们A[i] and ptr[i]
现在可以互换使用,对于一些小于10的整数.
那么为什么使用sizeof()得到的结果有所不同?
1> Cheers and h..:
该数组是一个数组.数组是内存中连续的项目序列.对于阵列Ñ项由所报告的尺寸sizeof
是Ñ 每个项目的大小倍.
指针是一个指针.指针值(实际上)是某事物的存储器地址.指针的大小基本上是内存地址的大小.
在某些上下文中,引用数组的表达式衰减到指向数组的第一项的指针,并且结合支持例如与指针一起使用的索引符号,可以使指针看起来类似于数组.当您通过引用传递数组或将其用作参数时sizeof
,衰变不会发生,但是当您例如向数组添加整数时会发生衰变,例如"Hello"+2
.这对于这样的数组没有意义,因此数组表达式衰减(到可以作为内置参数的指针类型+
).
最重要的是,在某些上下文中,数组类型被调整为指针类型.例如,具有签名的函数void foo(int a[42]);
被调整为void foo(int* a);
.这意味着可以使用任何指针调用该函数int
,无论它是否指向数组中的元素.数组衰减意味着您可以调用函数传递数组的名称,但a
函数的类型是int*
.