【发布时间】:2014-10-22 21:10:16
【问题描述】:
我的背景是 C++,我目前即将开始使用 C# 进行开发,所以我正在做一些研究。但是,在此过程中,我遇到了一些关于 C++ 的问题。
C# for C++ developers guide 这么说
在 C++ 中,数组只是一个指针。
但是this * question 有一个高度评价的评论说
数组不是指针。别再告诉别人了。
cplusplus.com page on pointers 表示数组和指针是相关的(并提到了隐式转换,因此它们显然不相同)。
数组的概念与指针的概念有关。事实上,数组的工作方式与指向它们的第一个元素的指针非常相似,而且实际上,数组总是可以隐式转换为正确类型的指针。
我的印象是,Microsoft 页面想要简化事情以总结 C++ 和 C# 之间的差异,并且在此过程中写了一些更简单但不是 100% 准确的东西。
但是数组与指针有什么关系呢?为什么他们的关系足够接近,即使他们不是,也可以概括为“相同”?
cplusplus.com 页面说数组“工作方式类似于”指向其第一个元素的指针。如果它们实际上不是指向第一个元素的指针,这意味着什么?
【问题讨论】:
-
*.com/questions/1641957/… 没有回答这个问题的哪一部分???
-
这个问题更笼统地概念化。
-
数组不是指针,但您可以像索引数组一样索引指针。数组也很容易衰减为指针。除此之外,看起来像数组的函数参数实际上是指针。所以有很多混乱的来源。全部或大部分来自 C。
-
考虑数组的类型包括元素的数量,并且该类型的大小占总空间。
-
@starsplusplus 比这要复杂一些。数组可以衰减为指针。但是您也可以通过引用函数来传递数组。在这种情况下,指针没有衰减。您还可以将指针传递给数组。在这两种情况下,都会保留大小信息。数组在传递给需要指针的函数时用作指针。