首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >C++中的静态数组与动态数组

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

Stack Overflow用户
提问于 2010-04-20 10:03:40
回答 8查看 254.6K关注 0票数 100

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

我必须为我的类做一个赋值,它告诉我不要使用静态数组,只使用动态数组。我在书里和网上都看过了,但我似乎不明白。

我认为静态是在编译时创建的,而动态是在运行时创建的,但我可能将其与内存分配搞混了。

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

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2010-04-20 10:08:22

本地数组是在堆栈上创建的,并且具有自动存储持续时间--您不需要手动管理内存,但是当函数结束时,它们会被销毁。它们必须有一个固定的大小:

代码语言:javascript
复制
int foo[10];

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

代码语言:javascript
复制
int* foo = new int[10];
delete[] foo;
票数 115
EN

Stack Overflow用户

发布于 2010-04-20 10:11:30

我认为你的类中使用的语义是令人困惑的。“静态”的意思可能仅仅是“固定大小”,而“动态”的意思可能是“可变大小”。在这种情况下,固定大小的数组可能如下所示:

代码语言:javascript
复制
int x[10];

而“动态”结构可以是允许在运行时增加或减少底层存储的任何类型的结构。大多数情况下,C++标准库中的std::vector类就足够了。像这样使用它:

代码语言:javascript
复制
std::vector<int> x(10); // this starts with 10 elements, but the vector can be resized.

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

票数 11
EN

Stack Overflow用户

发布于 2010-04-20 10:08:36

静态数组在编译时分配内存,内存在堆栈上分配。然而,动态数组在运行时被分配内存,内存是从堆中分配的。

代码语言:javascript
复制
int arr[] = { 1, 3, 4 }; // static integer array.   
int* arr = new int[3]; // dynamic integer array.
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2672085

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档