前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >C++中关于使用[]定义的静态数组和new分配的动态数组的区别

C++中关于使用[]定义的静态数组和new分配的动态数组的区别

作者头像
梦飞
发布于 2022-06-23 04:36:10
发布于 2022-06-23 04:36:10
1.6K00
代码可运行
举报
文章被收录于专栏:csdn文章同步csdn文章同步
运行总次数:0
代码可运行
  • 静态数组:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int a[20];
int b[] = {1, 2, 3}
  • 静态数组的长度为常量,在栈中分配内存空间,会自动释放。使用sizeof时,计算的是整个数组的字节大小。
  • 动态数组
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int len = 20;
int *a = new int[len];
delete a;

动态数组在堆中分配内存,必须手动释放。使用sizeof时,计算的是指针变量所占内存的字节大小。

在使用时,如果数组大小已经确定,可以使用静态数组,效率较高;如果数组大小需要在运行时确定(比如用户输入,函数参数传递等),则使用动态数组。 此外,如果需要在函数中返回数组,则必须注意用静态数组时,由于内存在栈中分配,函数执行完毕时会自动销毁,所以返回一个静态数组变量是无意义的;使用动态数组就可以返回,并在不需要时注意delete释放堆中的内存。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-03-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
C++中关于[]静态数组和new分配的动态数组的区别分析
这篇文章主要介绍了C++中关于[]静态数组和new分配的动态数组的区别分析,很重要的概念,需要的朋友可以参考下
全栈程序员站长
2022/07/18
9330
动态分配与静态分配的区别
所谓动态内存分配就是指在程序执行的过程中动态地分配或者回收存储空间的分配内存的方法。动态内存分配不象数组等静态内存分配方法那样需要预先分配存储空间,而是由系统根据程序的需要即时分配,且分配的大小就是程序要求的大小。
C语言与CPP编程
2020/12/02
2.9K0
【C++】动态内存管理
了解了这些之后,我们再来通过一个经典练习题深入理解一下内存区域的划分,如下代码:
修修修也
2024/04/20
1300
【C++】动态内存管理
C++使用指针,动态数组,指针做参数需要注意的问题等总结
指针是什么,有些萌新一听到指针就开始畏惧了,这种畏惧并不是来自指针给你的,而是他人给你的。我相信基本所有人都会在刚学习的时候百度:C语言最难的是什么?包括我。大多数答案告诉你指针最难,实话实说,指针确实难,但是是相对于其他知识点来说。通过网络上得到的一些信息,在没有学习指针之前,你便已经开始对指针存满了畏惧,在这里我想说,只有自己经历了才有资格去评价它其实单讲指针其实也没什么,前面学习的基本变量,整形,浮点型,字符型,等等,现在多了一个指针形,你只需要知道指针类型是用来存储地址的。地址也是一种数值,所以这没有什么难的,千万不要道听途说,要自己去证明。
花狗Fdog
2020/10/28
1.1K0
C++使用指针,动态数组,指针做参数需要注意的问题等总结
C/C++内存管理-学习笔记
内存在程序编译的时候就已经分配好了,在程序运行期间这块内存都存在,如全局变量,static变量等。
黑光技术
2019/03/06
1K0
C/C++内存管理-学习笔记
new和delete
在C++语言中,我们可以通过malloc分配堆上的内存,但是C++时使用new来分配内存
用户7272142
2023/10/11
2040
C++奇迹之旅:C++内存管理的机制初篇
数据段:也叫静态数据段或初始化数据段,用于存储程序中的全局变量和静态变量,这些变量在程序启动时就已经分配好内存空间并初始化。 代码段:也叫文本段或指令段,用于存储程序的可执行指令代码。 这部分内存区域通常是只读的,程序在运行时不能修改代码段中的内容。
学习起来吧
2024/05/06
1580
C++奇迹之旅:C++内存管理的机制初篇
7.1 C/C++ 实现动态数组
动态数组相比于静态数组具有更大的灵活性,因为其大小可以在运行时根据程序的需要动态地进行分配和调整,而不需要在编译时就确定数组的大小。这使得动态数组非常适合于需要动态添加或删除元素的情况,因为它们可以在不浪费空间的情况下根据需要动态增加或减少存储空间。
王瑞MVP
2023/08/15
2900
面试总结-C++
堆、栈、自由存储区、全局/静态存储区、常量存储区 自由存储区存储malloc申请的内存 (1)从静态存储区域分配 。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如 全局变量, static 变量 。 (2)在栈上创建 。在执行函数时, 函数内局部变量的存储单元都可以在栈上创建 ,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集。 (3)从堆上分配 , 亦称动态内存分配 。程序在运行的时候用 malloc 或 new 申请任意多少的内存,程序员自己负责在何时用 free 或 delete 释放内存。动态内存的生存期由程序员决定,使用非常灵活,但问题也最多。
小二三不乌
2018/08/02
2.1K0
熬夜整理的万字C/C++总结(一),值得收藏
贝尔实验室的Dennis Ritchie在1972年开发了C,当时他正与ken Thompson一起设计UNIX操作系统,然而,C并不是完全由Ritchie构想出来的。它来自Thompson的B语言。
C语言与CPP编程
2021/08/01
4760
熬夜整理的万字C/C++总结(一),值得收藏
C++从入门到精通——C++动态内存管理
C++动态内存管理涉及使用new和delete操作符来动态分配和释放堆内存。new用于在堆上分配内存并初始化对象,delete用于释放先前分配的内存。此外,C++还提供了智能指针如std::unique_ptr和std::shared_ptr来自动管理内存,以避免内存泄漏和悬挂指针。这些智能指针在超出作用域时会自动删除其所指向的对象。
鲜于言悠
2024/04/22
2310
C++从入门到精通——C++动态内存管理
C++中strlen()和sizeof()的区别
sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。     它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。     由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小。实际上,用sizeof来返回类型以及静态分配的对象、结构或数组所占的空间,返回值跟对象、结构、数组所存储的内容没有关系。     具体而言,当参数分别如下时,sizeof返回的值表示的含义如下:     数组——编译时分配的数组空间大小;     指针——存储该指针所用的空间大小(存储该指针的地址的长度,是长整型,应该为4);     类型——该类型所占的空间大小;     对象——对象的实际占用空间大小;     函数——函数的返回类型所占的空间大小。函数的返回类型不能是void。
用户7886150
2021/02/16
1K0
C++ 炼气期之数组探幽
数组是一种数据结构,与栈、队列、树、图……这类数结构不同,数组是实体数据结构,有自己的物理内存描述。栈、队列、树……是抽象数据结构,或者说是一种数据存储思想,没有对应的物理存储方案,需开发者自行设计逻辑存储方案。
一枚大果壳
2022/08/23
2800
C++ 炼气期之数组探幽
[C++]C++面试知识总结
1.程序运行知识 1.1 内存布局和分配方式 C程序的内存布局如下: 静态存储区:存储全局变量和static变量,通常在程序编译期间已经分配好了。 BSS段:存放未初始化的static变量和全局变量
昊楠Hacking
2018/04/16
1.8K0
[C++]C++面试知识总结
C++内存管理学习堆和栈
一 C++内存管理 1.内存分配方式   在讲解内存分配之前,首先,要了解程序在内存中都有什么区域,然后再详细分析各种分配方式。 1.1 C语言和C++内存分配区   下面的三张图,图1图2是一种比较详细的C语言的内存区域分法。图3是典型的C++内存分布图,简单易懂;以下内存分配图,区别就是图1和2则分为初始化和未初始化静态变量区,图3中是全局变量区。   C语言(图1和图2):(由低地址到高地址)   a)正文段:用来存放程序执行代码。通常,正文段是可共享的。另外,正文段常常是只读的,一次防止程序由于意
猿人谷
2018/01/17
2K0
C++内存管理学习堆和栈
程序员C语言快速上手——高级篇(十)
为什么需要在堆上面分配动态内存?在前面的章节中,我们一直使用自动内存,也就是栈内存,这并不影响C程序的编写,那么我们为什么还要去使用动态内存,而且还要很麻烦的去手动管理动态内存呢?
arcticfox
2019/07/26
1.4K0
【C 语言】内存管理 ( 动态内存分配 | 栈 | 堆 | 静态存储区 | 内存布局 | 野指针 )
程序运行后的内存布局 : 从高地址 到 低地址 介绍, 顺序为 栈 -> 堆 -> bss段 -> data 段 -> text段 ;
韩曙亮
2023/03/27
1.9K0
【C 语言】内存管理 ( 动态内存分配 | 栈 | 堆 | 静态存储区 | 内存布局 | 野指针 )
【C++】内存管理
1. 栈 又叫堆栈 -- 非静态局部变量 / 函数参数 / 返回值等等,栈是向下增长的。
The sky
2023/04/12
6910
【C++】内存管理
分享丨C/C++内存管理详解--堆、栈
因此要想成为C++高手,内存管理一关是必须要过的,除非放弃C++,转到Java或者.NET,他们的内存管理基本是自动的,当然你也放弃了自由和对内存的支配权,还放弃了C++超绝的性能。
一头小山猪
2020/04/10
1.1K0
【C++】C/C++内存管理详解
在之前的C语言中就有提到动态内存管理 【C语言】动态内存管理,那么在C++中又是怎么样的呢?话不多说,正文开始。
zxctscl
2024/03/08
1240
【C++】C/C++内存管理详解
相关推荐
C++中关于[]静态数组和new分配的动态数组的区别分析
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档