13、C语言中动态内存分配与指向它的指针变量

来源:互联网 发布:mac在美国多少钱一支 编辑:程序博客网 时间:2024/04/30 10:28
#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.

原创粉丝点击