C语言动态数组
2021/9/11 23:35:13
本文主要是介绍C语言动态数组,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
内存分配函数malloc calloc realloc free
堆内存分配函数 | 说明 |
---|---|
void * malloc(int n) | 形参n为要求分配的字节数。需要注意的是,malloc函数分配得到的内存空间是未初始化的。必须使用memset函数来初始化。 |
calloc(10, sizeof(char)); | 两个参数:单元数,单元的size。分配内存,并清理内存。初始内容全部为0; |
realloc(p,10); | 调整内存的大小; 分配的内存空间并未初始化;使用新返回的地址, |
free(void * p) | 释放指针p所指向的堆上的空间; |
malloc() 不对分配的内存空间做初始化,内存上原有的值不会被清理。
realloc(),在原有内存基础之上,在堆中间增加连续的内存,如果原有内存没有连续空间可扩展,则新分配一个空间,将原有内存copy到新空间,然后释放原有内存。
p = malloc(10); //直接申请4k的空间。内存页大小。 返回值是无类型指针void *,可以强制转换。 free(p); char *p = calloc(10, sizeof(char)); //两个参数:单元数,单元的size。 分配内存,并清理内存 char *p2 = realloc(p,10); // 在原有内存基础之上,在堆中间增加连续的内存,如果原有内存没有连续空间可扩展,则新分配一个空间,将原有内存copy到新空间,然后释放原有内存。 char *p2 = realloc(NULL,20); //此时,和malloc等价
realloc和malloc一样,只分配内存,不清理,需要手动初始化。
// 复杂数据内存放在堆里面
内存操作函数 memset memcpy memmove
memset(buf,0,sizeof(buf));//三个参数分别是:要设置的内存地址,要设置的值,值占的内存的字节数。 将一块内存初始化为0最长见的方法。 extern void *memset(void *buffer, int c, int count) memcpy(void *dest,void *src,unsigned int count);//将buf1的地址的内存内容全部拷贝到buf2,拷贝大小为第三个参数:字节一定确保内存区域没有内存区域重叠。 memmove(buf2, buf1, sizeof(buf1));//内存移动,并没有改变原始内存的值。
二维动态数组的建立和释放
在创建动态数组的过程中我们要遵循一个原则,那就是在创建的时候从外层往里层,逐层创建;
而释放的时候从里层往外层,逐层释放。
int main() { int num1,num2; num1 = 4; num2 = 5; int **array = (int **)calloc(num1,sizeof(int *));//开辟空间,num1个一维int*型指针 for(int i=0;i<num1;i++) { array[i] = (int *)calloc(num2,sizeof(int)); //给每个int *型指针分配内存 } for(int i=0;i<num1;i++) { for(int j=0;j<num2;j++) { array[i][j] =i*num2+j+1; printf("%d\t",array[i][j]); } printf("\n"); } for(int i=0;i<num1;i++) { free(array[i]); // 释放第二维的内存 } free(array); // 释放第一维的内存 return 0; }
这篇关于C语言动态数组的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-01巧用 TiCDC Syncpoint 构建银行实时交易和准实时计算一体化架构
- 2024-05-01银行核心背后的落地工程体系丨Oracle - TiDB 数据迁移详解
- 2024-04-26高性能表格工具VTable总体构成-icode9专业技术文章分享
- 2024-04-16软路由代理问题, tg 无法代理问题-icode9专业技术文章分享
- 2024-04-16程序猿用什么锅-icode9专业技术文章分享
- 2024-04-16自建 NAS 的方案-icode9专业技术文章分享
- 2024-04-14ansible 在远程主机上执行脚本,并传入参数-icode9专业技术文章分享
- 2024-04-14ansible 在远程主机上执行脚本,并传入参数, 加上remote_src: yes 配置-icode9专业技术文章分享
- 2024-04-14ansible 检测远程主机的8080端口,如果关闭,则echo 进程已关闭-icode9专业技术文章分享
- 2024-04-14result 成功怎么写-icode9专业技术文章分享