new和delete运算符用于动态分配和撤销内存的运算符

new使用方法:

1.     开辟单变量地址空间

1)new int;  //开辟一个存放数组的存储空间,返回一个指向该存储空间的地址.int *a = new int 即为将一个int类型的地址赋值给整型指针a.

2)int *a = new int(5) 作用同上,可是同一时候将整数赋值为5

2.     开辟数组空间

一维: int *a = new int[100];开辟一个大小为100的整型数组空间

二维: int **a = new int[5][6]

三维及其以上:依此类推.

一般使用方法: new 类型 [初值]

delete使用方法:

1. int *a = new int;

delete a;   //释放单个int的空间

2.int *a = new int[5];

delete [] a; //释放int数组空间

要訪问new所开辟的结构体空间,无法直接通过变量名进行,仅仅能通过赋值的指针进行訪问.

用new和delete能够动态开辟,撤销地址空间.在编程序时,若用完一个变量(通常是临时存储的数组),下次须要再用,但却又想省去又一次初始化的功夫,能够在每次開始使用时开辟一个空间,在用完后撤销它.

#include <iostream>
using namespace std;
int main()
{
char *p=new char[10];
scanf ("%s",p);
printf ("%s",p);
delete []p;
while (1);
return 0;
}

这是 二维数组的申请方法

#define   ROW   100
#define COL 200
#define T char (int,float,....) //通用数据类型
T ** pTemp ;
*pTemp = new T[ROW] ;
for (int i = 0 ; i < COL ; i ++)
pTemp[i] = new T[COL}; /////////////////delete
for (int i =0 ; i < COL ; i ++)
delete [] pTemp[i] ;
delete [][]pTemp ;

1.分配内存空间函数malloc



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



  2.分配内存空间函数 calloc



  calloc 也用于分配内存空间。调用形式: (类型说明符*)calloc(n,size) 功能:在内存动态存储区中分配n块长度为“size”字节的连续区域。函数的返回值为该区域的首地址。(类型说明符*)用于强制类型转换。calloc函数与malloc 函数的差别仅在于一次能够分配n块区域。比如: ps=(struet stu*) calloc(2,sizeof (struct stu)); 当中的sizeof(struct stu)是求stu的结构长度。因此该语句的意思是:按stu的长度分配2块连续区域,强制转换为stu类型,并把其首地址赋予指针变量ps。



  3.释放内存空间函数free



  调用形式: free(void*ptr); 功能:释放ptr所指向的一块内存空间,ptr 是一个随意类型的指针变量,它指向被释放区域的首地址。被释放区应是由malloc或calloc函数所分配的区域。

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h> void main()
{
int *array = 0, num, i;
printf("please input the number of element: ");
scanf("%d", &num); // 申请动态数组使用的内存块
array = (int *)malloc(sizeof(int)*num);
if (array == 0) // 内存申请失败,提示退出
{
printf("out of memory,press any key to quit...\n");
exit(0); // 终止程序执行,返回操作系统
} // 提示输入num个数据
printf("please input %d elements: ", num);
for (i = 0; i < num; i++)
scanf("%d", &array); // 输出刚输入的num个数据
printf("%d elements are: \n", num);
for (i = 0; i < num; i++)
printf("%d,", array); printf("\b \n"); // 删除最后一个数字后的分隔符逗号
free(array); // 释放由malloc函数申请的内存块
}

c/c++ 动态申请数组的更多相关文章

  1. c/c++ 动态申请数组(转载)

    转载:http://blog.csdn.net/hondely/article/details/6779887 转载:http://bbs.csdn.net/topics/390721031 转载:h ...

  2. Delphi动态申请数组内存的方法(不使用SetLength,采用和C相似的方式)

    procedure TForm1.Button1Click(Sender: TObject);type  TArr = array [0..0] of Integer;  PArr = ^TArr;v ...

  3. C++ - 动态申请数组空间

    // 用指针p指向由new动态分配的长度为length*sizeof(int)的内存空间. int * p = new int[length];

  4. C++二维数组动态申请内存

    好久没用C++刷题了,今天早上刷了几条题,感觉很陌生了.怪我,大二下实在太颓废了,没啥作为. 今天更新个关于c++二维数组内存申请的问题,当初作为菜鸟初学指针的时候,还是在这方面有点搞不通的.今天用到 ...

  5. C++动态申请一维数组和二维数组

    在平时的编程过程中,我们经常会用到数组来存放数据,我们可以直接申请足够大空间的数组来保证数组访问不会越界,但是即便这样,我们依然不能保证空间分配的足够,而且非常的浪费空间.有时候我们需要根据上面得到的 ...

  6. C++中动态申请二维数组并释放方法

    C/C++中动态开辟一维.二维数组是非常常用的,以前没记住,做题时怎么也想不起来,现在好好整理一下. C++中有三种方法来动态申请多维数组 (1)C中的malloc/free (2)C++中的new/ ...

  7. 消除VS中动态申请二维数组C6011,C6385,C6386的警告

    动态申请二维数组,无非就是通过指针来实现.@wowpH 过程分三步:1.申请内存,2.使用数组,3.释放内存. 代码如下: /************************************* ...

  8. c++ 依据输入动态声明数组(一维,二维)

    较早的编译器是不同意这样做的,所以一些书籍比方以Tc解说的书本都说数组的下标不能是变量.在vc6.0下亦是如此. 只是在一些较新的编译器如dev c++已经支持了,例如以下代码不会报错 #includ ...

  9. Android JNI编程(五)——C语言的静态内存分配、动态内存分配、动态创建数组

    版权声明:本文出自阿钟的博客,转载请注明出处:http://blog.csdn.net/a_zhon/. 目录(?)[+] 一:什么是静态内存什么又是动态内存呢? 静态内存:是指在程序开始运行时由编译 ...

随机推荐

  1. WebLech是一个功能强大的Web站点下载与镜像工具

    WebLech是一个功能强大的Web站点下载与镜像工具.它支持按功能需求来下载web站点并能够尽可能模仿标准Web浏览器的行为.WebLech有一个功能控制台并采用多线程操作. http://sour ...

  2. include与jsp:include区别

    jsp 中include有两种形式,分别是 <%@ include file=” ”%> <jsp:include page=” ” flush=”true”/> 前者是指令元 ...

  3. PHP - FTP上传文件类

    /** * 作用:FTP操作类( 拷贝.移动.删除文件/创建目录 ) * 时间:2006/5/9 * 作者:欣然随风 * QQ:276624915 */ class class_ftp { publi ...

  4. BZOJ 1854: [Scoi2010]游戏( 二分图最大匹配 )

    匈牙利算法..从1~10000依次找增广路, 找不到就停止, 输出答案. --------------------------------------------------------------- ...

  5. Python的strip()与split()

    ==>the start 说实话刚开始我对strip()和split()这两个还真的不太懂,后来在网上查了资料才明白. 可能别人觉着这俩很好区分,但是我最开始确实是有点分不清的,或者说不太确定这 ...

  6. getopt、getopt_long和getopt_long_only

    GNU/Linux的命令行选项有两种类型:短选项和长选项,前者以 '-' 作为前导符,后者以 '--' 作为前导符.比如有一个命令: $ myprog -a vv --add -b --file a. ...

  7. JVM调优总结(十)-调优方法

    JVM调优工具 Jconsole,jProfile,VisualVM Jconsole : jdk自带,功能简单,但是可以在系统有一定负荷的情况下使用.对垃圾回收算法有很详细的跟踪.详细说明参考这里 ...

  8. AV_百度百科

    AV_百度百科 AV(影片门类)

  9. 西门子PLC学习笔记七-(位逻辑指令)

    位逻辑指令处理的对象为二进制位信号.存储在状态字"RLO"中. 1.触点与线圈指令 1)常开触点 在PLC中规定:操作数为1,则常开触点"动作(闭合)":操作数 ...

  10. 分享一个嵌入式httpdserver开发库 - boahttpd library

    http://sourceforge.net/projects/boahttpd/ 一个C接口的开发库,适用于 windows/linux/或其它嵌入式平台,支持CGI扩展,支持多线程.採用面向对象开 ...