为什么 &a 和 c++ 中的静态数组相同?
Why is &a and a same in case of static arrays in c++?
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(。
希望这有帮助。
相关文章:
- C++17中函数模板中的静态数组初始化(MSVC 2019)
- 静态数组的自由动态数组
- 如何在C++函数中声明静态 2D 数组?
- 从另一个静态常量数组初始化静态常量数组(只需少量计算)
- 基于字节数组生成静态范围整数值
- 如何在C++中删除静态数组?
- 为什么 &a 和 c++ 中的静态数组相同?
- 为什么静态数组成员变量在调用对象的实例后不显示任何内容?
- C++ 返回指向函数内定义的静态数组的指针是否有效?
- 将在堆栈上声明的元素添加到静态数组
- const_cast静态数组以添加恒常性
- C++访问静态 constexpr 数组
- 初始化类中的静态 const 数组 - C++
- 将静态字符数组中的字符分配给动态分配的字符数组 - 访问冲突
- 动态分配的数组和静态数组之间的区别
- 如何在 C++ 中使用 NULL(或 0)初始化静态字符数组
- C++编译时使用 constexpr 字符数组指针分配静态数组?
- 我可以使用 constexpr 函数声明一个静态数组吗?
- 如何在静态函数中使用成员函数数组
- 具有大的2d数组:静态int与int