先来个开胃菜

  1. // 使用new动态分配存储空间
  2.  
  3. #include<iostream>
  4. using std::cout;
  5.  
  6. int main()
  7. {
  8. // 第1种方式
  9. int *a=new int;
  10. *a=;
  11. cout<<"使用第一种方式进行动态分配存储空间的结果为:\n"
  12. <<"*a= "<<*a<<std::endl;
  13. delete a; // 释放动态存储空间
  14. // 第2种方式
  15. int *b=new int();
  16. cout<<"使用第一种方式进行动态分配存储空间的结果为:\n"
  17. <<"*b= "<<*b<<std::endl;
  18. delete b; // 释放动态存储空间
  19. // 第3种方式
  20. int *c;
  21. c=new int();
  22. cout<<"使用第一种方式进行动态分配存储空间的结果为:\n"
  23. <<"*c= "<<*c<<std::endl;
  24. delete c; // 释放动态存储空间
  25.  
  26. // 动态创建数组
  27. float *d=new float [];//区别 1 new 类型()和 2 new 类型[数量]
                    //一个是通过构造函数创建一个对象
                    // 一个是创建动态数组但是没有初始化 如果是内置类型会有默认的构造函数
                    //大多数需要再次分别构造初始化
  28. d[]=;
  29. d[]=;
  30. d[]=;
  31. cout<<"d[0]= "<<d[]<<std::endl;
  32. d=d+; //数组名和指针之间的根本区别
  33. cout<<"d[0]= "<<d[]<<std::endl;
  34. d=d-;
  35. cout<<"d[0]= "<<d[]<<std::endl;
  36. delete [] d; // 释放动态存储空间
  37. return ;
  38. }

使用第一种方式进行动态分配存储空间的结果为:
*a= 1
使用第一种方式进行动态分配存储空间的结果为:
*b= 2
使用第一种方式进行动态分配存储空间的结果为:
*c= 3
d[0]= 3
d[0]= 6
d[0]= 3

以上为执行结果  自己想啊!!!!

new一个指针数组 
对于类A的指针,可以这样写,不仅仅new,还调用了A的构造函数。

  1. A *P = new A();

但是对于new 一个指针数组,我们可以这么写:

  1. A **P = new A *[10];//这里是创建了10个A类型的指针 返回的是指针的地址 切记没有初始化后面没有加上()

但是我们还没有进行构造呢?//这里不能忘记了构造啊!!!!

  1. for(int i=0; i<10; i++)
  2. {
  3. p[i] = new A();
  4. }

还有一个问题就是释放:

  1. for(int i=0; i<10; i++)
  2. {
  3. delete p[i];//为什么不是delete[]p[i]
  4. }
  5. delete [] p;
    //这一步很关键啊 不同的delete 不同的意图啊 自己想吧!

—————————————————————————————————————————

!!!!!!!!!!!!!!!!!重点

创建动态二维数组

1 pointer to pointer(二维指针

 int **dynamicArray = 0;

  1. dynamicArray = new int *[ROWS] ;
  2. for( int i = 0 ; i < ROWS ; i++ )
  3. {
  4. dynamicArray[i] = new int[COLUMNS]; //显然是多少列。切记没有初始化没有加上()!!!!!!是随机值哦!!
      //这里注意和上面的分配指针数组的区别啊!是一个[]符号啊不是()符号!
  5.    //这里两者[] ()区别是:一个是分配多少个对象至于初始化看是不是内置类型和加不加上()
      //一个是构造一个对象            
  6. }
  7. for( int i = 0 ; i < ROWS ; i++ )
  8. {
  9. delete [] dynamicArray[i] ;//这里也是同样要区别与指针数组的释放啊!前面加上了一个[]!!知道什么意思吧
  10. }
  11. delete [] dynamicArray ;
  12. //加个餐!!!!!!!!!!!!
  1. 下面描述正确的是
  2.  
  3. int *p1 = new int[];
  4. int *p2 = new int[]();
  5.  
  6. p1p2申请的空间里面的值都是随机值
  7. p1p2申请的空间里的值都已经初始化
  8. p1申请的空间里的值是随机值,p2申请的空间里的值已经初始化(对)
  9. p1申请的空间里的值已经初始化,p2申请的空间里的值是随机值
  10. 解释
  11. C++primer(第5版)中关于new的讨论有:
  12. new当个对象
  13. new在自由空间分配内存,但其无法为其分配的对象命名,因次是无名的,分配之后返回一个指向该对象的指针。
  14.  
  15. int *pi = new int; // pi指向一个动态分配的,未初始化的无名对象
  16. new表达式在自由空间构造一个int类型对象,并返回指向该对象的指针。
  17.  
  18. 默认情况下,动态分配的对象是默认初始化的,这意味着内置类型或组合类型的对象的值是无定义的,而类类型对象将用默认构造函数进行初始化。
  19.  
  20. new(多个对象)数组
  21. new分配的对象,不管单个对象还是多个对象的分配,都是默认初始化。但可以对数组进行值初始化,方法就是:在大小之后添加一对空括号。
  22.  
  23. int *pia = new int[]; // 10个未初始化int
  24. int *pia2 = new int[](); // 10个值初始化为0的int
  25.  
  26. int *p2 = new int[]();申请了空间,而且进行了初始化int *p1 = new int[];只申请空间,没有进行初始化原因:对于一些结构体,我们可以看到()往往表示构造函数,int是基本类型算初始化吧理由:你可以测试输出两种的值你会发现p1的值未知,而p2清零了
  27.  
  28. new运算符只是申请分配一个内存空间而已,因为不知道为其分配对象的名称,所以分配之后返回的只是一个指向该对象的指针,并没有初始化,加上一个()后,就相当于调用了默认构造函数,会默认初始化,用0来初始化

//还是vector比较好理解啊!也是比较好使用!!!  二维动态数组而且是分配在栈空间的动态数组

2 vector of vector

  1. #include <vector>
  2. using namespace std;
  3. #define ROWS 4
  4. #define COLUMNS 4
  5. vector<vector<int> > dynamicArray(ROWS, vector<int>(COLUMNS));
  6. for(int i = 0;i < dynamicArray.size();++i)//有错 int i 类型 不对 与size()函数不匹配啊
  7. {
  8. for(int j = 0;j < dynamicArray[i].size();++j)//有错
  9. {
  10. dynamicArray[i][j] = i*j;
  11. }
  12. }
  13. for(int i = 0;i < dynamicArray.size();++i)//这里有错误 自己找 同上
  14. {
  15. for(int j = 0;j < dynamicArray[i].size();++j)//有错
  16. {
  17. cout << dynamicArray[i][j] << endl;
  18. }
  19. }

分配一维动态数组or 二维动态数组的方法以及学习 new 方法or vector的更多相关文章

  1. [转载]C++二维动态数组memset()函数初始化

    来源:https://blog.csdn.net/longhopefor/article/details/20994919 先说说memset函数: void *memset(void *s,int ...

  2. go 动态数组 二维动态数组

    go使用动态数组还有点麻烦,比python麻烦一点,需要先定义. 动态数组申明 var dynaArr []string 动态数组添加成员 dynaArr = append(dynaArr, &quo ...

  3. java基础5 (一维)数组和二维数组

    本文知识点(目录): 一维数组(一维数组的概念.优点.格式.定义.初始化.遍历.常见异常.内存分析以及常见操作(找最大值.选择排序.冒泡排序等等))    二维数组(二维数组的遍历.排序.查找.定义. ...

  4. 一维数组、二维数组——Java

    一. 一维数组 1.  数组是相同类型数据的有序集合 相同类型的若干个数据,按照一定先后次序排列组合而成 每个数组元素可以通过一个下标来访问它们 其中,每一个数据称作一个数组元素 2. 数组特点: 其 ...

  5. C#的一维数组和二维数组定义方式:

    一维数组: //一维数组定义与初始化 ,, };//第一种方式 , , }; //第二种方式 int[] one3; //第三种方式 one3=,,}; 二维数组: //二维数组定义与初始化 //不规 ...

  6. C# 数组、一维数组、二维数组、多维数组、锯齿数组

    C#  数组.一维数组.二维数组.多维数组.锯齿数组 一.数组: 如果需要使用同一类型的对象,就可以使用数组,数组是一种数据结构,它可以包含同一类型的多个元素.它的长度是固定的,如长度未知的情况下,请 ...

  7. demo:动态生成专属二维码

    在日常生活中,随处可见二维码,那么js如何生成动态的专属二维码?其实,通过"二维码插件"我们可以快速生成二维码.在这,记录一下的生成专属二维码demo,一起来看看jquery.qr ...

  8. 微信小程序动态生成保存二维码

    起源:最近小程序需要涉及到一些推广方面的功能,所以要写一个动态生成二维码用户进行下载分享,写完之后受益良多,特此来分享一下: 一.微信小程序动态生成保存二维码 wxml: <view class ...

  9. 二维数组,锯齿数组和集合 C# 一维数组、二维数组(矩形数组)、交错数组(锯齿数组)的使用 C# 数组、多维数组(矩形数组)、锯齿数组(交叉数组)

    二维数组,锯齿数组和集合 一.二维数组 二维数组:一维数组----豆角二维数组----表格 定义:1.一维数组:数据类型[] 数组变量名 = new 数据类型[数组长度];数据类型[] 数组变量名 = ...

随机推荐

  1. R: 一页显示多张图的方法

    ################################################### 问题:一页多图显示   18.4.30 怎么实现,在一页上画多幅图,并且安排图的大小.个数等?? ...

  2. ZROI2018提高day9t1

    传送门 分析 我们首先想到的自然是根据大小关系建图,在这之后我们跑一遍拓扑排序 但是由于l和r的限制关系我们需要对传统的拓扑排序做一些改变 我们考虑将所有入度为0且现在的拓扑序号已经大于等于l的点放入 ...

  3. html 连接数据库

    http://blog.csdn.net/haxker/article/details/4214001 http://www.cnblogs.com/chuncn/archive/2010/11/22 ...

  4. java获取Excel的导出

    import java.io.*; import org.apache.commons.io.FileUtils; import org.apache.poi.hssf.usermodel.HSSFC ...

  5. Core中间件——访问记录

    引言 上半年使用的thinkjs开发的node项目有一个优点就是所有请求都会有日志记录在控制台输出,里面包含了请求地址以及耗时.我就希望在.net中也可以实现这样子的功能,正好想到了中间件,所以就用中 ...

  6. HttpRunnerManager接口自动化测试框架测试报告页面优化

    在测试报告生成结果页面,点击左上角的图标不能快速返回到首页.在大神的指点下,要改一个跳转链接,如下图: 修改路径如下: 修改的字段:把<a href="#!" class=& ...

  7. Go语言技术教程:Redis介绍安装和使用

    Redis介绍 我们日常的开发,数据都需要进行持久化存储,常见的持久化存储有很多种,比如数据库,文件,计算机内存,甚至云服务器等都是持久化存储数据的方式.而就数据库而言,经常又会被人们分为关系型数据库 ...

  8. 51nod1448(yy)

    题目链接: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1448 题意: 中文题诶~ 不过要仔细看题, 原来颜色是被覆盖 ...

  9. JavaBean简介和用法

    一.JavaBean的含义 JavaBean是使用Java语言开发的一个可重用组件,能使Html代码与JAVA代码分离,并节省开发时间,简单的说就是一个包含了setter和getter以及至少一个无参 ...

  10. maven profile启动项目