函数用法:malloc、calloc、realloc、memset

摘录自《Linux C 从入门到精通》。

关于动态内存的分配所使用的操作函数在这里主要介绍malloc函数、calloc函数、realloc函数和memset函数的基本用法。

(1)malloc函数

函数原型为:

void *malloc(unsigned int size);

该函数的功能是分配长度为size字节的内存块。

如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。注意当内存不再使用时,要使用free()函数释放内存块。例如使用malloc函数获得一块内存空间,内存空间的大小与返回的指针类型由程序员根据需要自行规定,代码如下:

void main()

{

long* buffer;

buffer = (long *)malloc(400);                        //获得一块长整型数组空间

free(buffer);                                        //释放内存空间

}

 

(2)calloc函数

函数原型为:

void *calloc(unsigned n,unsigned size);

该函数的功能是在内存的动态区存储中分配n个长度为size的内存块。

如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL,同样在内存不再使用时要用free()函数释放内存块。

同时,用calloc函数可以为一维数组开辟动态存储空间,n为数组元素个数,每个元素长度为size。

例如,使用calloc函数获得一块长整型数组空间,代码如下:

void main()

{

long* buffer;

buffer = (long *)calloc(20,sizeof(long));                //获得一块长整型数组空间

free(buffer);                                            //释放内存空间

}

 

(3)realloc函数

函数原型为:

void *realloc(void *mem_address,unsigned int newsize);

该函数的功能是调整mem_address所指内存区域的大小为newsize长度。

如果重新分配内存成功,则返回指向被分配内存的指针,否则返回空指针NULL。并且当内存不再使用时,要应用free()函数将内存空间释放。

当参数mem_address指向NULL时,即调整空指针所指向的内存区域的大小为newsize长度,此时realloc函数的功能就如同malloc函数。若参数newsize为0,即要调整成的长度为0时,函数realloc所实现的功能相当于free函数,释放掉该内存区块。

例如:在vim编辑器中编写一个简单的C语言程序,使用realloc函数重新分配一块内存空间。

#include
#include
main()
{
    char *p;
    p=(char *)malloc(100);                         /* 为指针p开辟一个内存空间*/
    if(p)                                          /*判断内存分配成功与否*/
        printf("Memory Allocated at: %x",p);
    else
            printf("Not Enough Memory!\n");       
    getchar();
    p=(char *)realloc(p,256);                      /*调整p内存空间从100字节调整到256字节*/
    if(p)
        printf("Memory Reallocated at: %x",p);
    else
        printf("Not Enough Memory!\n");
    free(p);                                      /*释放看p所指向的内存空间*/
    getchar();
    return 0;
}

 

(4)memset函数

函数原型为:

void *memset(void *s,char ch,unsigned n);

该函数的功能是设置s中的所有字节为ch,s数组的大小为n。

例如:在vim编辑器中编写一个简单的C语言程序,演示memset函数的功能,使用字符‘*’替换数组s中的字符串。

#include
#include
int main(void)
{
	char s[] = "welcome to mrsoft\n";              /*定义一个字符数组s*/
	printf("s before memset: %s\n", s);            /*输出字符数组中的内容*/
	memset(s, '*', strlen(s) - 1);                 /*设置s数组中的字符串内容为“*”*/
	printf("s after memset: %s\n", s);             /*输出此时的字符数组内容*/
	return 0;
}


 

你可能感兴趣的:(C语言)