C语言中动态分配内存
2013-10-27 10:07
155 查看
什么是内存动态分配:全局变量是分配在内存中的静态存储区的,非静态的局部变量(包括形参)是分配在内存中的动态存储区的,这个存储区是一个称为栈的区域。所谓动态分配内存指的是C语言允许建立内存动态分配区域,需要时开辟,不需要时释放,这个动态存储区成为堆。
怎样建立内存的动态分配:主要有四个库函数:malloc calloc free realloc
1.malloc函数 void *malloc(unsigned int size)
作用是在内存中分配一个长度为size的连续空间,返回值是指针。如果分配失败,返回NULL。
2.calloc 函数 void *calloc(unsigned n, unsigned size)
作用是在内存中分配n个长度为size的连续空间,返回起始地址。若果分配失败,返回NULL。用calloc函数可以建立动态数组,n为数组元素个数,size为每个元素的长度。
3.free函数 void *free(void *p)
释放由p所指向的动态存储区,无返回值。
4.realloc函数 void *realloc(void *p,unsigned int size)
用于改变有malloc或者calloc开辟的动态区域的大小。若失败,则返回NULL。
注意:除free函数外,每个函数的返回值都是void * 型的指针。在使用这几个函数时,要进行强制类型转换。这几个函数同在C++中的<cstdlib>中。
void 指针类型:不指向任何具体的数据。不要理解为指向任意类型,而是空类型,不指向任何类型,需要强制转换才能赋值给其他类型的指针。
例子源代码:
#include<iostream>
#include<cstdlib>
using namespace std;
int main()
{
void check(int *); //由于函数出现在定义之前,故需要申明
int *p1,i; //p1为指向整型变量的指针
void *p2; //p2为指向void型的指针
p2=malloc(5*sizeof(int));//sizeof()为求类型的字节数
p1=(int *)p2; //强制类型转换
for(i=0;i<5;++i)
scanf("%d",p1+i); //随机访问
check(p1);
free(p2); //释放p2所指向的区域
}
void check(int *p)
{
int i;
printf("They are fail:");
for(i=0;i<5;++i)
if(p[i]<60)printf("%d",p[i]);
printf("\n");
}
知识总是要一点一点积累的,欲速则不达...
怎样建立内存的动态分配:主要有四个库函数:malloc calloc free realloc
1.malloc函数 void *malloc(unsigned int size)
作用是在内存中分配一个长度为size的连续空间,返回值是指针。如果分配失败,返回NULL。
2.calloc 函数 void *calloc(unsigned n, unsigned size)
作用是在内存中分配n个长度为size的连续空间,返回起始地址。若果分配失败,返回NULL。用calloc函数可以建立动态数组,n为数组元素个数,size为每个元素的长度。
3.free函数 void *free(void *p)
释放由p所指向的动态存储区,无返回值。
4.realloc函数 void *realloc(void *p,unsigned int size)
用于改变有malloc或者calloc开辟的动态区域的大小。若失败,则返回NULL。
注意:除free函数外,每个函数的返回值都是void * 型的指针。在使用这几个函数时,要进行强制类型转换。这几个函数同在C++中的<cstdlib>中。
void 指针类型:不指向任何具体的数据。不要理解为指向任意类型,而是空类型,不指向任何类型,需要强制转换才能赋值给其他类型的指针。
例子源代码:
#include<iostream>
#include<cstdlib>
using namespace std;
int main()
{
void check(int *); //由于函数出现在定义之前,故需要申明
int *p1,i; //p1为指向整型变量的指针
void *p2; //p2为指向void型的指针
p2=malloc(5*sizeof(int));//sizeof()为求类型的字节数
p1=(int *)p2; //强制类型转换
for(i=0;i<5;++i)
scanf("%d",p1+i); //随机访问
check(p1);
free(p2); //释放p2所指向的区域
}
void check(int *p)
{
int i;
printf("They are fail:");
for(i=0;i<5;++i)
if(p[i]<60)printf("%d",p[i]);
printf("\n");
}
知识总是要一点一点积累的,欲速则不达...
相关文章推荐
- C语言:堆结构串(动态分配内存)
- C语言之动态分配内存
- C语言复习 指针和动态分配内存
- C++ 与C语言 动态分配内存的区别
- c语言 什么时候需要动态分配内存?
- 输入一个长度未知的字符串,用动态分配内存的方法(C语言实现)
- 关于C语言动态分配内存传指针的理解
- C语言复习 指针和动态分配内存
- C语言杂谈——动态分配内存
- 【碎片知识(3)· C语言】malloc函数动态分配内存空间在链表中的应用
- C语言为指针动态分配内存 内存泄露
- 怎么查看动态分配内存空间的大小(c语言)
- C语言动态分配内存的方法
- C语言深入学习--checklist5:sizeof、指针、动态分配内存
- c语言中结构,动态分配内存的理解
- 数据结构复习之C语言malloc()动态分配内存概述
- C语言 利用malloc()和realloc()动态分配内存
- c语言之动态分配内存malloc函数
- c语言—指针基础(8:动态分配内存)
- C语言动态分配内存