13、C语言中动态内存分配与指向它的指针变量
2013-06-06 18:13
483 查看
#include <stdio.h> #include <stdlib.h> int main() { //1、动态分配内存函数 char *p;//p的值是一个随机值(有可能已经被系统占用)。有可能会产生内存冲突。 //malloc默认返回 void *,需要强制转换。 p=(char *)malloc(sizeof(char));//在内存动态分配区分配一个sizeof(char)字节的连续空间, 并将首地址赋予p。 *p='A'; printf("p=%d,*p=%c\n",p,*p); //calloc 动态分配n个长度为size的字节数的连续空间,并将首地址返回 //void * calloc(n,size)//可以为一维数组分配动态存储空间 int *p1=NULL;//空指针。一般大多数系统都保证0位置不保存任何对象或者函数。这样操作*p1就不会对程序产生影响 int i=0; p1=(int *)calloc(10,sizeof(int)); for(i=0;i<10;i++) { p1[i]=i; (*(p1+i))++; } printf("p1=%d\n",p1); for(i=0;i<10;i++) { printf("p1[%d]=%d\n",i,p1[i]); } //2、为已经用使用malloc 或者 calloc分配过连续内存空间的指针变量重新调整大小 指针变量的值不变 //void * realloc(*p,size); printf("为p1重新分配内存:\n"); p1=realloc(p1,sizeof(int)); *p1=20; printf("p1=%d,*p1=%d\n",p1,*p1); //3、释放指针变量p所指向的动态空间.但是指针变量本身所占用的内存并不释放。p必须为最近一次有调用过calloc malloc realloc等分配的。 free(p); free(p1); printf("释放内存空间\n",p,p1); //p p1 的指向暂时不会改变。也可以引用这段内存,但有可能会出现内存泄漏等。所以一般需要加上 printf("p=%d,p1=%d\n",p,p1); p=NULL; p1=NULL;//消除不明(在以后程序使用这段内存的与否)指向。 printf("声明为空指针\n",p,p1); printf("p=%d,p1=%d\n",p,p1); return 0; }
程序运行结果:
p=7482152,*p=A
p1=7474944
p1[0]=1
p1[1]=2
p1[2]=3
p1[3]=4
p1[4]=5
p1[5]=6
p1[6]=7
p1[7]=8
p1[8]=9
p1[9]=10
为p1重新分配内存:
p1=7474944,*p1=20
释放内存空间
p=7482152,p1=7474944
声明为空指针
p=0,p1=0
Process returned 0 (0x0) execution time : 0.160 s
Press any key to continue.
相关文章推荐
- 改变指针指向的字符内容、动态分配字符型指针变量内存空间
- C语言学习9: malloc动态内存存储,动态内存分配去空格字符增长版,动态内存分配去符号incr增长版,型参和返回值都是int型的函数的指针,main函数的地址也可以用指针指向,typedef定义函数指针,函数定义与嵌套的作用,返回函数指针类型,const作用
- 动态内存分配与指向它的指针变量
- c语言:动态内存分配
- C语言内存动态分配与释放
- C语言中的动态内存分配详解
- 何时让指针变量指向用malloc新分配的一块内存?
- C语言之指针专题一:指针变量和指针所指向的内存空间是两个不同的概念
- C语言中的动态内存分配
- C语言随机数和动态地分配内存空间
- C语言之动态内存分配与释放
- C语言动态内存分配:(二)malloc/calloc/realloc/aligned_malloc
- C语言中动态内存分配 malloc realloc calloc 的使用和比较
- An Enhanced Allocator——为C语言的动态内存分配添加出错预警
- 链表的C语言实现(含动态内存分配)
- C语言实现用程序数据段空间模拟内存的动态分配
- C语言内存动态分配与释放
- c语言中内存的动态分配与释放(多维动态数组构建)
- 链表的C语言实现(含动态内存分配)
- C语言中动态内存分配