十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
1、malloc函数:其作用是在内存的动态存储区中分配一个长度为size的连续空间。其参数是一个无符号整形数,返回值是一个指向所分配的连续存储域的起始地址的指针。
创新互联公司自2013年起,先为永嘉等服务建站,永嘉等地企业,进行企业商务咨询服务。为永嘉企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
2、free函数:由于内存区域总是有限的,不能不限制地分配下去,而且一个程序要尽量节省资源,所以当所分配的内存区域不用时,就要释放它,以便其它的变量或者程序使用。这时我们就要用到free函数。
3、calloc函数:其作用是在内存的动态存储区中分配n个长度为 size 的连续空间。函数返回一个指向分配区域的起始位置的指针;如果分配不成功,则返回NULL。
扩展资料:
函数运算符:
new
运算符new用于向系统申请动态存储空间,并把首地址作为运算结果,它的使用形式为:
指针变量=new 数据类型;
例如:
int *p=new int
该语句的作用是会用new从内存中申请了一个int型变量(4个字节),并将该变量的首地址赋给指针变量p。
new所建立的变量的初始值是任意的,也可在用new分配内存的同时进行初始化。使用形式为:
指针变量=new 数据类型(初始值)。
delete
堆内存可按照要求进行分配,程序对内存的需求量随时会发生变化,有时程序在运行种可能会不再需要由new分配的内存空间,而且程序还未运行结束,这时就需要把先前占用的内存空间释放给堆内存,以后重新分配,供程序的其他部分使用。运算符delete用于释放new分配的内存空间,删除建立的对象,它的使用形式为:
delete 指针变量;
其中的指针变量中保存着new分配的内存的首地址。
参考资料:百度百科--动态内存分配
#include iostream
#include cstdlib
#include ctime
using namespace std;
const int MAX_SIZE=100;
void partition1(int A[],int n,int first,int last,int mid)//划分
{
int i=first,j=last,x=A[i];
while(ij)
{
while(ijA[j]%3!=0)
j--;
if(ij)
{
A[i]=A[j];i++;
}
while(ijA[i]%3==0)
i++;
if(ij)
{
A[j]=A[i];
j--;
}
}
A[i]=x;
mid=i;
}
void partition2(int A[],int n,int first,int last,int mid)//划分
{
int i=first,j=last,x=A[i];
while(ij)
{
while(ijA[j]%3!=1)
j--;
if(ij)
{
A[i]=A[j];i++;
}
while(ijA[i]%3==1)
i++;
if(ij)
{
A[j]=A[i];
j--;
}
}
A[i]=x;
mid=i;
}
void QuickSort(int A[],int n,int first,int last)//快速排序
{
int middle;
if(firstlast)
{
partition1(A,n,first,last,middle);
partition2(A,n,middle+1,last,middle);
}
}
void display(int A[],int n)
{
int i=0;
for(i=0;in;i++)
coutA[i]" ";
coutendl;
}
int main()
{
int array[MAX_SIZE],i=0,n=1;
srand(time(0));
cout"提示:本程序是将一个整型数组调整为这样的数组:所有3的倍数在左边,所有除以 "endl;
cout"3余1的数放在中间,而所有除以3余2的数放在最右边.要求算法的时间尽可能少. "endl;
coutendl"数组中元素的值在1~n之间变化,请输入n的值:";
cinn;
for(i=0;iMAX_SIZE;i++) //插入随机数
array[i]=rand()%n;
cout"排序前:"endl;
display(array,MAX_SIZE);
QuickSort(array,MAX_SIZE,0,MAX_SIZE-1);
cout"排序后:"endl;
display(array,MAX_SIZE);
system("PAUSE");
return 0;
}
快速排序
倒数第二个参数很容易理解吧,就是告诉你调用该函数后实际向文件中写了多少字节,这个值和你指定的要写入多少字节不一定相等,因为如果出错或者执行异步写操作的话,这个值不会等于你指定的要写入的字节数。你要做的就是传递一个dword变量地址,函数会将实际写入的字节数设为该变量的值,调用结束后,检查该变量的值即可知道实际写入了多少字节。
最后一个参数是一个overlaapped结构体指针,它指出,如果你在打开文件(调用createfile或socket创建函数等)时
打开方式指定了file_flag_overlapped标记,那么你需要传递一个overlaapped结构体的地址,如果没有指定该标记,则传递null即可,一般直接传递null,只有在需要异步操作时,才需要指定。
可以写出一个常规调用:
handle
hfile=createfile(……);
tchar
buf[255];//定义一个buf用于提供写入到文件的数据//调用一些函数填充buf,此处省略,也可以是一个外部buf,里面有内容就不用填充了。
dword
bytestowrite=255;
dword
byteswritten=0;
if(!writefile(hfile,buf,bytestowrite,byteswritten,null))
{
//……调用失败
}
malloc函数主要是用于功态申请内存。对于一些程序有可能会临时使用一些内存,用过后就不再需要了。虽然可以定义一个数组来实现,但如果需要的数量较大,且数量不固定,定义数组的方法会造成内存空间浪费。而用malloc可以实现动态申请内存,使用完后可以释放,能提高内存的利用率。当然如果是要始终保持数据的话,用数组会更方便。
用malloc函数申请内存是要指出数量的。且在使用时,不应超过申请的数量。如果对超过申请数量的内存单进行操作(特别是写入操作),是有可能因内存泄露而影响系统正常动行。