为什么 &a 和 c++ 中的静态数组相同?

Why is &a and a same in case of static arrays in c++?

本文关键字:数组 静态 c++ 为什么      更新时间:2023-10-16
int a[10];

现在这里&a和a是一样的,我不清楚逻辑为什么会这样。我可以说 a 的值与 &a 相同,*(a( 是 a[0] 吗?(但如何 a 不是指针(。 在动态数组的情况下,我很清楚。

int *da = new int[10];

da的值是基址,&da 给出存储指针的地址,我们尊重 da 到达 da[0]。

它们不一样。

a是一种int[10]类型;一个数组

&a是指向int[10]类型的指针。

在某些情况下(在算术表达式中使用时传递给函数时(,a衰减int*类型。然后,可以使用指针算法来访问数组的其他元素。这可能是导致你困惑的原因。

da是一种int*类型。

唯一衰减到自己的是函数指针

那么"a"和"&a"绝对不一样

int a[10] 从内存中占用一个特定的块来分配 10 个整数,这个块称为 a。

"&a"是指您创建的 10 个整数的内存块的内存地址。 这就像您的酒店里有一个酒店房间(由 10 个元素组成的数组(。(你的记忆地址("&a"指的是你的房间号,你的地址。

现在说例如int *p = &a意味着我正在制作一个只能指向整数的整数指针"p",并且我给它"a"(整数数组(的内存地址,以便它可以指向它。

所以:

int a[10] 是您的酒店房间;

&a 是您的房间号;

*p = &a 是连接到您的房间号的钥匙链(您的钥匙串指向您的房间号、您的地址(;

这就是为什么有时我们使用 : int *da = new int[10]; 立即在内存中为 10 个整数分配一个空格,并直接指向它的指针(在本例中为 da(。

希望这有帮助。