为了账号安全,请及时绑定邮箱和手机立即绑定

C+中的静态数组与动态数组

C+中的静态数组与动态数组

C++
慕田峪7331174 2019-07-10 16:00:28
C+中的静态数组与动态数组在C+中静态数组和动态数组有什么区别?我必须为我的类做一个赋值,它说不使用静态数组,只使用动态数组。我看过这本书,也在网上看过,但我似乎不明白。我认为静态是在编译时创建的,而动态是在运行时创建的,但我可能把它误认为是内存分配。你能解释一下C+中静态数组和动态数组的区别吗?
查看完整描述

3 回答

?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

本地数组是在堆栈上创建的,并且具有自动存储时间-您不需要手动管理内存,但是当它们处于结束状态时它们会被销毁。它们必须有固定的尺寸:

int foo[10];

创建的数组operator new[]具有动态存储时间,并存储在堆上(技术上是“空闲存储”)。它们可以有任意大小,但是您需要自己分配和释放它们,因为它们不是堆栈框架的一部分:

int* foo = new int[10];delete[] foo;


查看完整回答
反对 回复 2019-07-10
?
慕雪6442864

TA贡献1812条经验 获得超5个赞

静态是C和C+中的关键字,所以当应用于变量或数组时,静态不是一般的描述性术语,而是具有非常特定的意义。更复杂的是,它在不同的语境中有三个不同的含义。因此,静态数组可以是固定的,也可以是动态的。

让我解释一下:

第一个是特定于C+的:

  • 静态类成员是未使用构造函数实例化或使用析构函数删除的值。这意味着必须以其他方式初始化和维护成员。静态成员可以被初始化为NULL的指针,然后在第一次调用构造函数时分配。(是的,这将是静态和动态的)

其中两个是从C继承而来的:

  • 在函数中,静态变量是在函数调用之间保留内存位置的变量。它是静态的,因为它只初始化一次,并且在函数调用之间保留它的值(静态的使用使函数不可重入,即不是线程安全)。

  • 函数之外声明的静态变量是只能从同一个模块中访问的全局变量(源代码文件和任何其他#include‘s)

您想问的问题是动态数组与固定或编译时数组之间的区别。这是一个更容易的问题,编译时数组是预先确定的(程序编译时),是函数堆栈框架的一部分。它们是在主函数运行之前分配的。动态数组在运行时使用“new”关键字(或来自C的malloc系列)分配,它们的大小事先不知道。在程序停止运行之前,动态分配不会自动清除。


查看完整回答
反对 回复 2019-07-10
?
白板的微信

TA贡献1883条经验 获得超3个赞

我认为在你的课堂上使用的语义学是令人困惑的。“静态”的意思可能只是“恒定大小”,而“动态”的意思可能是“可变大小”。在这种情况下,常量大小数组可能如下所示:

int x[10];

一个“动态”的结构就是允许底层存储在运行时增加或减少的任何一种结构。大多数情况下,std::vector从C+标准库初始化就足够了。像这样使用它:

std::vector<int> x(10); // this starts with 10 elements, but the vector can be resized.

std::vectoroperator[]定义,因此可以使用与数组相同的语义。


查看完整回答
反对 回复 2019-07-10
  • 3 回答
  • 0 关注
  • 783 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信