gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 01:15:31 26 4
gpt4 key购买 nike

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

最近看到这个帖子 How to find the 'sizeof' (a pointer pointing to an array)? ,我不知道 A 和 ptr 之间的区别是什么。两者不都只是拥有数组的基地址吗?

对于小于 10 的整数 i,我们现在可以交替使用 A[i] 和 ptr[i]

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

最佳答案

数组是数组。数组是内存中连续的项目序列。对于 n 个项目的数组,sizeof 报告的大小是每个项目大小的 n 倍。

指针是指针。指针值(实际上)是某物的内存地址。指针的大小本质上就是内存地址的大小。

在某些上下文中,引用数组的表达式衰减指向数组第一项的指针,并且结合对例如与指针一起使用的索引符号可以使指针看起来类似于数组。当你例如通过引用传递一个数组,或者将它用作 sizeof 的参数,但它确实发生在你例如向数组添加一个整数,如 "Hello"+2。这对于数组本身没有意义,因此数组表达式衰减(到可以用作内置 + 参数的指针类型)。

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

关于c++ - 数组名和另一个指向第一个元素的指针有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28266166/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com