黑马程序员--c语言动态内存分配

动态内存分配  (malloc)
函数原型:
      void *malloc (size_t size)
         size_t是无符号的长整形  
         动态内存在堆段 
         返回值void*表示泛型指针,可以赋给任意一个类型的指针变量


         函数类型存储在栈段
 
eg:
    char *p = malloc(1000);
    p 是这一千个字节的首地址
    p+1是第2个字节的地址
    定义后可以使用他的每一个空间
 
    int *q = malloc(1000);
    q[0]是前4个字节,使用q可以4字节4字节的访问空间


堆空间的分配有可能失败
   char *p = malloc(1000);
   if (!p)
  {
       perror("malloc");
       exit(-1);
  }//exit 表示将当前进程终止  return表示将当前函数终止  不管在main函数还是其他函数,用到exit程序会终止


使用完毕,要释放
   free(p);
   内容并没有改变,只是权限释放掉
   开辟堆空间,告诉系统这块空间已被占用


栈空间是静态内存分配,编译时就已经决定了,main开辟空间根据声明的变量决定,不会在改变
堆空间是动态内存分配,是在运行的时候决定的


数组的大小占用的空间在编译代码的时候就已经决定了,属于静态内存分配


动态内存分配
大小运行时决定
程序员分配
堆段
手动释放


静态
大小编译时决定
        编译器分配
        栈段 数据段 只读数据段
自动释放
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值