堆内存是什么呢?
我们知道在c/c++中定义的数组大小必需要事先定义好,他们通常是分配在静态内存空间或者是在栈内存空间内的,但是在实际工作中,我们有时候却需要动态的为数组分配大小,在这里c库中的malloc.h头文件中的malloc()函数就为您解决了问题(bc或者是在老的标准中是alloc.h),它的函数原形是void* malloc(size_t size),在动态开辟的内存中,在使用完后我们要使用free()函数来释放动态开辟的内存空间。
下面我们来看一个完整的例子:
#include <iostream>
#include <malloc.h>
using namespace std;
main()
{
int arraysize; //元素个数
int *array; //用于动态开辟数组的指针变量
cin>>arraysize;
//利用malloc在堆内存中开辟内存空间,它的大小是元素的个数乘以该数据类型的长度
array=(int*)malloc(arraysize * sizeof(int));
for(int i=0;i<arraysize;i++)
{
array[i]=i;
}
for(int i=0;i<arraysize;i++)
{
cout<<array[i]<<",";
}
cout<<endl;
free(array);//利用free释放动态开辟的堆内存空间
cin.get();
cin.get();
}
这里要特别注意个地方就是:
array=(int*)malloc(arraysize * sizeof(int));
malloc()的函数原形本身是void* malloc(size_t size),由于动态分配的空间计算机并不知道是用来做什么的所以是无类型的,但你要把它用在动态的整形数组上的时候就要显式的转换成int*了。
下面我们再介绍c++所独有的开辟和释放堆内存空间的方法,new修饰符和delete修饰符。
new和delete修饰符的操作并不需要头文件的支持,这是c++所独有的,new操作要比malloc更为简单,直接说明开辟的类型的数目就可以了,delete使用的时候如果是数组那么必须使用delete[]。
#include <iostream>
using namespace std;
main()
{
int arraysize; //元素个数
int *array;
cin>>arraysize;
array=new int[arraysize];//开辟堆内存
for(int i=0;i<arraysize;i++)
{
array[i]=i;
}
for(int i=0;i<arraysize;i++)
{
cout<<array[i]<<",";
}
cout<<endl;
delete[] array;//释放堆内存
cin.get();
cin.get();
}
分享到:
相关推荐
C++中new和delete是对内存分配的运算符,取代了C中的malloc和free。 标准C++中的字符串类取代了C标准C函数库头文件中的字符数组处理函数。 C++中用来做控制态输入输出的iostream类库替代了标准C中的stdio函数库。...
其中,第一篇是C++数据表达篇,主要内容包括:C++入门、变量和数据类型、运算符和表达式以及程序控制结构等;第二篇是C++面向过程设计篇,包括函数、编译预处理、数组、指针和构造数据类型等内容;第三篇是C++面向...
鸡啄米:C++编程入门系列之三十二(数组、指针和字符串:动态内存 分配和释放) 鸡啄米:C++编程入门系列之三十三(数组、指针和字符串:用字符数 组存放和处理字符串) 鸡啄米:C++编程入门系列之三十四(数组...
Essential c++ 压缩内存版 这是一本非常好的c++入门书籍,帮助程序员有一个正确的C++思想。
其中,第一篇是C++数据表达篇,主要内容包括:C++入门、变量和数据类型、运算符和表达式以及程序控制结构等;第二篇是C++面向过程设计篇,包括函数、编译预处理、数组、指针和构造数据类型等内容;第三篇是C++面向...
本人学习笔记,从基础逐步深入,其中还包括内存、指针、等内容,很适合c++程序员使用
Visual C++ 2005入门经典.pdf(整理并添加所有书签) ,看书的时候更方便. 封面 目录 第1章 使用Visual C++ 2005 编程 1.1 .NET Framework 1.2 CLR 1.3 编写C++应用程序 1.4 学习windows编程 1.4.1 学习c++ 1.4.2 C++...
Visual C++ 2005入门经典.pdf(整理并添加所有书签) ,看书的时候更方便. 封面 目录 第1章 使用Visual C++ 2005 编程 1.1 .NET Framework 1.2 CLR 1.3 编写C++应用程序 1.4 学习windows编程 1.4.1 学习c++ 1.4.2 C++...
C++标准函数库中80%是STL,其中广泛使用了泛性编程思想,在其中分为几大部分。 1:语言支持部分。 2:诊断部分。包含了异常处理,断言,错误代码三大方式。 3:通用工具部分。包括动态内存管理工具,日期/时间处理...
Visual C++ 2005入门经典.pdf(整理并添加所有书签) ,看书的时候更方便. 封面 目录 第1章 使用Visual C++ 2005 编程 1.1 .NET Framework 1.2 CLR 1.3 编写C++应用程序 1.4 学习windows编程 1.4.1 学习c++ 1.4.2 C++...
本书故意省略了 C++标准库中的某些部分 比如对本地化和算术运算库的支持 C++标 准库非常广泛 要想介绍它的所有方面 则远远超出了本书的范围 在后面所附的参考文献 中 某些书更详细地讨论了该库 见 MUSSER96 和 ...
《Accelerated C++》的作者Andrew Koenig是C++标准化过程中的核心人物之一。C++不同于C的一个关键地方就在于,C++在完全保留有C的高效的基础上,增添了抽象机制。而所谓的“现代C++风格”便是倡导正确利用C++的抽象...
其中,第1篇是C++数据表达篇,包括C++入门、变量和数据类型、运算符和表达式以及程序控制结构等;第2篇是C++面向过程设计篇,包括函数、编译预处理、数组、指针和构造数据类型等内容;第3篇是C++面向对象编程篇,...
在本教程中,那些ANSI-C++中新增的而老一代C++编译器大多不支持概念将备用如下标志标出: ANSI C++新增的概念 同样对于C和C++在实现上有明显不同的概念,将备用如下标志标出: C 与 C++不同的地方 编译器 本教程中...
本人根据学习c++面向对象而写的所有设计到面向对象的概念的工程文件
4、C++内存管理等高级知识 无论您是在校大学生,还是职业学员,或者其他开发人员,本书都志在全面提高您的C++编程思想和开发实力,使您能够系统的学习C++,写出高质量的C++代码,相信读完本书后能使您获益匪浅。
在C++编程中,指针和内存管理是非常重要的概念。正确地使用指针和有效地管理内存可以提高程序的性能和可靠性。本文将介绍指针的基本概念和语法,并深入讨论与内存管理相关的重要知识点。我们将通过实例代码来说明...
本书描述了C++ 编程和设计中必须掌握但通常被误解的主题,这些主题涉及的范围较广,包括指针操作、模板、泛型编程、异常处理、内存分配、设计模式等。作者根据本人以及其他有经验的管理人员和培训老师 的经验总结,...
C++新手入门教程之一,包括C++基础知识、动态内存分配、函数、基本控制结构程序设计、继承与多态性。