c/c++开发分享C语言动态数组详解

服务器sass管理系统

目录内存分配函数malloc calloc realloc free 堆内存分配函数 说明

目录

内存分配函数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到新空间,然后释放原有内存。

%ignore_pre_1%

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("%dt",array[i][j]);  		}  		printf("n");  	}  	for(int i=0;i<num1;i++)  	{  		free(array[i]);		// 释放第二维的内存  	}  	free(array);			// 释放第一维的内存  	return 0;  }  

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注<猴子技术宅>的更多内容!

需要了解更多c/c++开发分享C语言动态数组详解,都可以关注C/C++技术分享栏目—猴子技术宅(www.ssfiction.com)

本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

如若转载,请注明出处:https://www.ssfiction.com/c-cyuyankaifa/792789.html

发表评论

邮箱地址不会被公开。 必填项已用*标注