C和C++ 语言动态内存分配

转载 2015年07月10日 15:00:41

一、C语言动态内存分配

    要实现动态内存的分配,除了利用含指针成员的结构体之外,还需利用C语言提供的几个标准库函数。(使用时应包含头文件“alloc.h”或“malloc.h”或“stdlib.h”)

    1.malloc函数

  函数原型为void *malloc(unsigned int size);在内存的动态存储区中分配一块长度为"size" 字节的连续区域。函数的返回值为该区域的首地址。 “类型说明符”表示把该区域用于何种数据类型。(类型说明符*)表示把返回值强制转换为该类型指针。“size”是一个无符号数。例如: pc=(char *) malloc (100); 表示分配100个字节的内存空间,并强制转换为字符数组类型,函数的返回值为指向该字符数组的指针, 把该指针赋予指针变量pc。若size超出可用空间,则返回空指针值NULL。

    2.calloc 函数

    函数原型为void *calloc(unsigned int num, unsigned int size)

  按所给数据个数和每个数据所占字节数开辟存储空间。其中num为数据个数,size为每个数据所占字节数,故开辟的总字节数为num*size。函数返回该存储区的起始地址。calloc函数与malloc 函数的区别仅在于一次可以分配n块区域。例如: ps=(struct stu*) calloc(2,sizeof (struct stu)); 其中的sizeof(struct stu)是求stu的结构长度。因此该语句的意思是:按stu的长度分配2块连续区域,强制转换为stu类型,并把其首地址赋予指针变量ps。

    3. realloc函数:

  函数原型为void *realloc(void *ptr, unsigned int size)

      重新定义所开辟内存空间的大小。其中ptr所指的内存空间是用前述函数已开辟的,size为新的空间大小,其值可比原来大或小。函数返回新存储区的起始地址(该地址可能与以前的地址不同)。例如p1=(float *)realloc(p1,16);将原先开辟的8个字节调整为16个字节。

**动态申请的内存空间要进行手动用free()函数释放

    4. free函数:

  函数原型为void free(void *ptr)

  将以前开辟的某内存空间释放。函数原型为 void free(void *ptr)其中ptr为存放待释放空间起始地址的指针变量,函数无返回值。应注意:ptr所指向的空间必须是前述函数所开辟的。例如free((void *)p1);将上例开辟的16个字节释放。可简写为free(p1);由系统自动进行类型转换。

二、C++语言动态内存分配

  C++语言中用new和delete来动态申请和释放内存。

    1. 申请单个对象

  int *p;

  p=new int;或者 p=new int(value);

  2. 动态申请数组

  int *p;

  p=new int [100];

  这样可以申请长度为100的数组,但是不能进行初始化。

 3. delete

  int *p, *q;

  p=new int;

  q=new int[10];

  delete p;

  delete [ ]q;

 

转载自http://www.cnblogs.com/zhj202190/archive/2011/05/11/2043620.html

Linux C语言调用C++动态链接库

如果你有一个c++做的动态链接库.so文件,而你只有一些相关类的声明,那么你如何用c调用呢, C++创始人在编写C++的时候,C语言正盛行,他不得不让C++兼容C。C++最大的特性就是封装,继承,多...
  • jsh13417
  • jsh13417
  • 2014年03月10日 22:56
  • 5503

C语言调用C++库接口的方法概述

最近需要在由纯c语言编写的代码中调用C++的动态库,在网上找了一些资料,现在总结下解决方法。 主要的思想就是将C++的动态库再封装一层,在这一层编写C语言的函数api,这API中使用C++动态库提...
  • vevenlcf
  • vevenlcf
  • 2015年05月26日 11:25
  • 2745

用java调用C或C++动态链接库原来如此简单

用java调用C或C++动态链接库原来如此简单
  • javaniuniu
  • javaniuniu
  • 2017年03月31日 11:30
  • 1270

如何在C/C++中动态分配地址连续访问快速的二维数组

如何在C/C++中动态分配二维数组 在C/C++中动态分配二维数组可以先申请一维的指针数组,然后该数组中的每个指针再申请数组,这样就相当于二维数组了,但是这种方法会导致每行可能不相邻,从而访问效...
  • lovehota
  • lovehota
  • 2013年11月21日 09:17
  • 2350

动态规划01背包与完全背包的C语言实现

01背包是基础的背包问题,即容量为v的背包, 给你n件物品, 每件物品只有一件, 每件物品所占体积vi, 价值wi已知,求此背包所能容纳的前提下,让在其中物品价值最大。 此问题状态方程为发f[i][v...
  • shadowam
  • shadowam
  • 2017年02月10日 11:17
  • 825

C语言动态数组原理及实现

近来编写几个程序,很多都用到了数组。但是对于数组的大小却是没有固定的,也就是说可以更改数组大小,其大小是可以变化的。并不像初学时的那样,告诉你一个范围,你就必须取最大值以满足要求。那样可能就会浪费很多...
  • u013398034
  • u013398034
  • 2016年07月11日 16:48
  • 6465

C语言动态数据结构

静态链表静态数据结构一般指 整型,浮点型 ,数组。它们固定大小 动态数据结构指的是 动态存储分配链表是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一...
  • liuzp111
  • liuzp111
  • 2016年12月23日 20:59
  • 879

动态规划C语言初学

动态规划问题解决的基本思想: 1、根绝问题所求的那一项和变量的个数,确定是一维数组,二维数组或者多维数组。 2、写出初始值,一般是某个变量为1或者0 的特殊情况时候的解。 3、通过循环,一般是两个循环...
  • qq_34207422
  • qq_34207422
  • 2017年04月04日 15:54
  • 188

Proc *C/C++入门之动态SQL

基本概念在有些情况下, 在编码时 SQL 语句还不能完整地写出来, 而是在程序执行时才能 构造出来,这种在程序执行临时生成的 SQL 语句叫动态 SQL 语句. 利用动态 SQL 来 编写 Pro...
  • lzjsqn
  • lzjsqn
  • 2017年01月11日 23:02
  • 980

五个常用算法(一):动态规划

1.从01背包问题说起 有一堆宝石一共n个,现在你身上能装宝石的就只有一个背包,背包的容量为C。把n个宝石排成一排并编上号: 0,1,2,…,n-1。第i个宝石对应的体积和价值分别为V[i]和W[...
  • byplane
  • byplane
  • 2016年10月03日 17:22
  • 2724
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C和C++ 语言动态内存分配
举报原因:
原因补充:

(最多只允许输入30个字)