数组是否与 C 相同C++

Are arrays in C++ same as C?

本文关键字:相同 C++ 是否 数组      更新时间:2023-10-16

C++编译器处理数组的方式是否与在 C 中相同?

例如

在 C 中,

  • 使用下标的数组访问运算符始终被解释为指针。
  • 在函数参数中,数组声明被视为指向的指针元素的开头。

是和否。在大多数情况下,数组在两种语言中的工作方式相同(C99 支持可变长度数组,而 C++ 不支持,并且可能还有其他一些细微的差异)。

但是,您所说的也不完全正确。编译器不会将数组访问视为指针,即使在 C 中也是如此。在某些情况下,数组访问可能更有效,因为编译器在数组大小写中具有有关别名的更好信息。在 C 和 C++ 中,纯指针访问意味着编译器必须假定它可以别名任何其他兼容类型。如果编译器只是将其视为指针取消引用,那么将失去此优化机会。

编辑
正如评论中指出的,语言标准确实根据指针算术/取消引用定义了数组下标。当然,实际的编译器利用了指针实际上是一个数组的附加信息,因此它们并不完全被视为指针,但这可以被视为超出标准要求的优化。

与 C99 不完全相同。C99 支持可变长度数组 (VLA),但C++不支持。

void f(int n)
{
   int array[n]; //valid C99, but invalid C++
}

这意味着,C++编译器不会像 C(即 C99)编译器那样对待数组。

但是,其他版本的C(即C89)不支持VLA。因此,C89 数组将与C++数组 [几乎] 相同。

是的,它们的处理方式相同。但是,在C++您可能不应该使用它们 - 调查std::vector类!

是的。数组在 C 和 C++ 中的处理方式相同。但是,C++现在有了STL,它是数据结构和对它们的操作的集合,例如字符串、向量、deque 等。

是的,除了有趣和吸引人的OOP功能之外,C++是C语言的扩展版本。斯特罗斯图普和其他人设计它的唯一目的是创建一个具有类似C语法的面向对象语言。基本上,两者在大多数情况下是相同的(不包括C++的 OOP 功能),数组也不例外。

"数组基本上是指向顺序内存块的指针。其中数组的名称表示该块的第一个位置。此语句适用于 C 和 C++。

数组实现是相同的C++尽管编译器允许您使用它们的方式存在一些限制。