挑战30天C++入门极限-C++中堆内存(heap)的概念和操作方法
来源:互联网 发布:在职研究生网络授课 编辑:程序博客网 时间:2024/04/29 08:53
我们知道在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;
array=(int*)malloc(arraysize * sizeof(int));//利用malloc在堆内存中开辟内存空间,它的大小是元素的个数乘以该数据类型的长度
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();
}
- 挑战30天C++入门极限-C++中堆内存(heap)的概念和操作方法
- C++中堆内存的概念和操作方法入门
- 挑战30天C++入门极限-C/C++中数组和指针类型的关系
- 挑战30天C++入门极限-c/c++中指针学习的两个绝好例子
- 挑战30天C++入门极限-C/C++中函数指针的含义(上)
- 挑战30天C++入门极限-C/C++中命令行参数的原理
- 挑战30天C++入门极限-C/C++中函数指针的含义(下)
- C++中堆内存的概念和操作方法入门(转载)
- 挑战30天 C/C++ 入门极限系列教程-引言
- 挑战30天 C/C++ 入门极限系列教
- 挑战30天C++入门极限-C/C++中字符串常量的不相等性及字符串的Copy
- 挑战30天C++入门极限-C/C++中字符指针数组及指向指针的指针的含义
- 挑战30天C++入门极限-C/C++中枚举类型(enum)
- 挑战30天C++入门极限-C/C++中利用数组名/指针进行排序实例
- 挑战30天C++入门极限-C/C++中利用空指针简化代码,提高效率
- 挑战30天C++入门极限-C++中布尔类型
- 挑战30天C++入门极限-c++中函数重载的相关知识
- 挑战30天C++入门极限-在C++语言中,关于内联函数(inline)的入门教程
- 挑战30天C++入门极限-C++中的const限定修饰符
- 挑战30天 C/C++ 入门极限系列教程-引言
- 挑战30天C++入门极限-C++中布尔类型
- 挑战30天C++入门极限-c++中函数重载的相关知识
- 挑战30天C++入门极限-在C++语言中,关于内联函数(inline)的入门教程
- 挑战30天C++入门极限-C++中堆内存(heap)的概念和操作方法
- 完善的修改3389的方法
- 挑战30天C++入门极限-C++中的函数重载
- 大事件:Red Hat 宣布并购JBoss!
- 请停止犯贱——(与charmkid的一点共鸣)
- 挑战30天C++入门极限-C/C++中字符串常量的不相等性及字符串的Copy
- 挑战30天C++入门极限-C/C++中字符指针数组及指向指针的指针的含义
- 开发基于ATL窗口应用的步骤
- appfuse学习指导