1.malloc()函数------动态分配一段内存空间
- 函数原型:void *malloc(unsigned int size);
- 功能:在内存的动态存储区申请一个长度为size字节的连续存储空间,malloc()函数会返回一个指针,并指向所分配存储空间的起始地址(无足够存储空间可分配
函数的返回值类型为空指针NULL) 函数值为指针类型,由于基类型为void,若要将此指针值赋给其他类型的指针变量,应当强制类型转换
例
int *p=(int *)malloc(sizeof(int))
申请一个int 类型长度的存储空间,并将分配到的存储空间地址转换为 int 类型地址,赋给所定义的指针变量p
#include<stdio.h>
#include<stdlib.h>
int main()
{
int *pInt;//定义指针pInt并分配内存空间
pInt=(int *)malloc(sizeof(pInt));
*pInt=100;//使用新空间保存数据
printf("%d\n",*pInt);
free(pInt);
printf("%d\n",*pInt);//保存数据的空间已被释放,数据不将存在,故输出一个不可预料的值
return 0;
}
2.calloc()函数--------动态分配连续内存空间
-
函数原型:void *calloc(unsigned int n,unsigned int size);
-
功能:在内存申请n个长度为size字节的存储空间,并返回该存储空间的起始地址
主要用于为动态数组申请存储空间,n为元素的个数,size为元素存储长度
例
int *p=(int *)calloc(10,sizeof(int));
申请10个int 类型长度的存储空间,并将分配到的存储空间地址转换为 int 类型地址,将其首地址赋给所定义的指针变量p
此后 即可将p作为10个元素的整型数组使用,此数组无数组名,只能用指针变量p来访问,
也可用malloc()函数实现
int *p=(int *)malloc(sizeof(int)*10);
#include<stdio.h>
#include<stdlib.h>
#define LEN sizeof(char[26])
int main()
{
int i;
/*使用calloc动态分配一个长度为26字节的字符数组*/
char *ch1=(char *)calloc(26,sizeof(char));
/*使用malloc动态分配一个长度为26字节的字符数组*/
char *ch2=(char *)malloc(LEN);
for(i=0;i<26;i++)
{
ch1[i]=65+i;//小写字符数组
ch2[i]=97+i;//大写字符数组
}
printf("26个英文字母表:\n");
for(i=0;i<26;i++)
{
printf("%c%c ",ch1[i],ch2[i]);
if(i==12 || i==25)
printf("\n");
}
free(ch1);
free(ch2);
return 0;
}
3.realloc()------改变指针指向空间大小
- 函数原型:void *realloc(void *ptr,size_t size);
- 功能:改变ptr指针指向大小为size的空间,设定size的大小是任意的,返回值是一个指向新地址的指针
例
改变一个浮点型空间大小为整型大小
fDouble=(double *)malloc(sizeof(double)); 指向分配的浮点型空间
iInt=realloc(fDouble,sizeof(int));
realloc()函数改变fDouble指向空间的大小 将其大小设置为整型,然后将改变后的内存空间的地址返回赋值给iInt指针
#include<stdio.h>
#include<stdlib.h>
int main()
{
short *s;
double *f=(double *)malloc(sizeof(double));
printf("指针f指向内存空间的起始地址:\n%d\n",f);//申请double变量所占内存空间
printf("指针f指向内存空间的大小:\n%d字节\n",sizeof(*f));//打印首地址
s=(short *)realloc(f,sizeof(short));//重新分配内存
printf("指针s指向内存空间的起始地址:\n%d\n",s);//打印首地址
printf("指针s指向内存空间的大小:\n%d字节\n",sizeof(*s));//打印空间大小
return 0;
}
//新分配的内存空间和原来的空间起始地址一样,但大小不同
4.free()函数------释放内存空间
- 原型:void free(void *p)
- 功能:将指针变量p指向的存储空间释放,交还给系统,free()函数无返回值,
p只能是程序中此前最后一次调用malloc()或calloc()函数所返回的地址
`int *p,*q=(int *)calloc(10,sizeof(int));
p=q; q++;
free(p); // 将p指向的,此前调用的calloc()函数申请的存储空间释放若改用free(q)则会提示错误,因为执行了q++,以后,q已改变,若改用free(q)则会提示错误,因为执行了q++,以后,q已改变
#include<stdio.h>
#include<stdlib.h>
int main()
{
int *pInt;//定义指针pInt并分配内存空间
pInt=(int *)malloc(sizeof(pInt));
*pInt=100;//使用新空间保存数据
printf("%d\n",*pInt);
free(pInt);
printf("%d\n",*pInt);//保存数据的空间已被释放,数据不将存在,故输出一个不可预料的值
return 0;
}