动态存储--堆分配--数组
来源:互联网 发布:java简单小游戏 编辑:程序博客网 时间:2024/05/21 11:27
动态数组
动态数组是相对于静态数组而言,静态数组的长度是预先定义好的,在整个程序中,一旦给定大小后就无法改变。而动态数组则不然,它可以随程序需要而重新指定大小。动态数组的内存空间是从堆动态分配的。是通过执行代码而为其分配存储空间。当程序执行到我们编写的分配语句时,才为其分配。对于静态数组,其创建非常方便,使用完也无需释放,要引用也简单,但是创建后无法改变其大小是其致命弱点!对于动态数组,其创建麻烦,使用完必须由程序员自己释放,否则将会引起内存泄露。但其使用非常灵活,能根据程序需要动态分配大小。
malloc 和calloc 和 realloc 的区别:
malloc和calloc(两者都是动态分配内存)
用malloc只分配空间不初始化,也就是依然保留着这段内存里的数据,而calloc则进行了初始化,calloc分配的空间全部初始化为0;
区别:主要的不同是malloc不初始化分配的内存,已分配的内存中可以是任意的值. calloc初始化已分配的内存为0。次要的不同是calloc返回的是一个数组,而malloc返回的是一个对象。
calloc:
函数calloc()会将所分配的内存空间中的每一位都初始化为零,也就是说,如果你是为字符类型或整数类型的元素分配内存,那麽这些元素将保证会被初始化为0;如果你是为指针类型的元素分配内存,那麽这些元素通常会被初始化为空指针;如果你为实型数据分配内存,则这些元素会被初始化为浮点型的零。
realloc :
char *p;
p=(char *)realloc(p,sizeof(char)*n);
代码:
#include<cstdio>#include<iostream>#include<algorithm>#include<cstring>#include<stdlib.h>using namespace std;int main(){ int n; while(~scanf("%d",&n)) { int *p; p=(int *)malloc(n*sizeof(int)); for(int i=0; i<n; i++) { scanf("%d",&p[i]); } for(int i=0; i<n; i++) { printf("%d%c",p[i],i<n-1?' ':'\n'); } free(p); }}
malloc ——>free(p);
new———>delete p;
#include<cstdio>#include<algorithm>#include<iostream>#include<cstring>#include<stdlib.h>using namespace std;int main(){ int n; while(~scanf("%d",&n)) { int *p=new int [n]; for(int i=0;i<n;i++) { scanf("%d",&p[i]); } for(int i=0;i<n;i++) { printf("%d%c",p[i],i<n-1?' ':'\n'); } delete p; }}
- 动态存储--堆分配--数组
- 二维数组动态存储分配
- 堆分配存储串
- B00001 C语言动态存储分配空间作为数组
- 串的堆分配存储
- 串的堆分配存储
- 串的堆分配存储
- 动态存储分配
- 动态存储分配
- 动态存储分配
- 动态存储分配
- 动态存储分配
- 动态存储分配
- 动态存储分配
- 二维数组的堆分配
- C++动态数组分配
- 动态数组分配
- 动态数组分配内存
- java中如何遍历实体类的属性和数据类型以及属性值
- JDBC的操作步骤和实例(转载)
- 【CQOI2007】【NKOJ2006】三角形
- 6 ICMP:Internet控制报文协议
- LeetCode74 Search a 2D Matrix
- 动态存储--堆分配--数组
- failed to connect to beauty.moreunion.com/47.93.20.43 (port 80) after 15000ms
- HTTP协议理解 + PHP使用curl函数发送Post请求的注意事项
- 上台阶
- 网络七层协议
- 图片缓存到 cdCard
- Codeforce-191C-Fools and Roads (树链剖分 更新边权)
- 二维数组更快的遍历方式
- 正则表达式简介及常用正则表达式分享