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

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

在C+中静态数组和动态数组有什么区别?

我必须为我的类做一个赋值,它说不使用静态数组,只使用动态数组。我看过这本书,也在网上看过,但我似乎不明白。

我认为静态是在编译时创建的,而动态是在运行时创建的,但我可能把它误认为是内存分配。

你能解释一下C+中静态数组和动态数组的区别吗?


慕田峪7331174
浏览 784回答 3
3回答

qq_遁去的一_1

本地数组是在堆栈上创建的,并且具有自动存储时间-您不需要手动管理内存,但是当它们处于结束状态时它们会被销毁。它们必须有固定的尺寸:int foo[10];创建的数组operator new[]具有动态存储时间,并存储在堆上(技术上是“空闲存储”)。它们可以有任意大小,但是您需要自己分配和释放它们,因为它们不是堆栈框架的一部分:int* foo = new int[10];delete[] foo;

慕雪6442864

静态是C和C+中的关键字,所以当应用于变量或数组时,静态不是一般的描述性术语,而是具有非常特定的意义。更复杂的是,它在不同的语境中有三个不同的含义。因此,静态数组可以是固定的,也可以是动态的。让我解释一下:第一个是特定于C+的:静态类成员是未使用构造函数实例化或使用析构函数删除的值。这意味着必须以其他方式初始化和维护成员。静态成员可以被初始化为NULL的指针,然后在第一次调用构造函数时分配。(是的,这将是静态和动态的)其中两个是从C继承而来的:在函数中,静态变量是在函数调用之间保留内存位置的变量。它是静态的,因为它只初始化一次,并且在函数调用之间保留它的值(静态的使用使函数不可重入,即不是线程安全)。函数之外声明的静态变量是只能从同一个模块中访问的全局变量(源代码文件和任何其他#include‘s)您想问的问题是动态数组与固定或编译时数组之间的区别。这是一个更容易的问题,编译时数组是预先确定的(程序编译时),是函数堆栈框架的一部分。它们是在主函数运行之前分配的。动态数组在运行时使用“new”关键字(或来自C的malloc系列)分配,它们的大小事先不知道。在程序停止运行之前,动态分配不会自动清除。

白板的微信

我认为在你的课堂上使用的语义学是令人困惑的。“静态”的意思可能只是“恒定大小”,而“动态”的意思可能是“可变大小”。在这种情况下,常量大小数组可能如下所示:int&nbsp;x[10];一个“动态”的结构就是允许底层存储在运行时增加或减少的任何一种结构。大多数情况下,std::vector从C+标准库初始化就足够了。像这样使用它:std::vector<int>&nbsp;x(10);&nbsp;//&nbsp;this&nbsp;starts&nbsp;with&nbsp;10&nbsp;elements,&nbsp;but&nbsp;the&nbsp;vector&nbsp;can&nbsp;be&nbsp;resized.std::vector有operator[]定义,因此可以使用与数组相同的语义。
打开App,查看更多内容
随时随地看视频慕课网APP