先来个开胃菜

 // 使用new动态分配存储空间

 #include<iostream>
using std::cout; int main()
{
// 第1种方式
int *a=new int;
*a=;
cout<<"使用第一种方式进行动态分配存储空间的结果为:\n"
<<"*a= "<<*a<<std::endl;
delete a; // 释放动态存储空间
// 第2种方式
int *b=new int();
cout<<"使用第一种方式进行动态分配存储空间的结果为:\n"
<<"*b= "<<*b<<std::endl;
delete b; // 释放动态存储空间
// 第3种方式
int *c;
c=new int();
cout<<"使用第一种方式进行动态分配存储空间的结果为:\n"
<<"*c= "<<*c<<std::endl;
delete c; // 释放动态存储空间 // 动态创建数组
float *d=new float [];//区别 1 new 类型()和 2 new 类型[数量]
                //一个是通过构造函数创建一个对象
                // 一个是创建动态数组但是没有初始化 如果是内置类型会有默认的构造函数
                //大多数需要再次分别构造初始化
d[]=;
d[]=;
d[]=;
cout<<"d[0]= "<<d[]<<std::endl;
d=d+; //数组名和指针之间的根本区别
cout<<"d[0]= "<<d[]<<std::endl;
d=d-;
cout<<"d[0]= "<<d[]<<std::endl;
delete [] d; // 释放动态存储空间
return ;
}

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

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

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

A *P = new A();

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

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

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

for(int i=0; i<10; i++)
{
p[i] = new A();
}

还有一个问题就是释放:

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

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

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

创建动态二维数组

1 pointer to pointer(二维指针

 int **dynamicArray = 0;

dynamicArray = new int *[ROWS] ;

for( int i = 0 ; i < ROWS ; i++ )
{
dynamicArray[i] = new int[COLUMNS];
//显然是多少列。切记没有初始化没有加上()!!!!!!是随机值哦!!
  //这里注意和上面的分配指针数组的区别啊!是一个[]符号啊不是()符号!
   //这里两者[] ()区别是:一个是分配多少个对象至于初始化看是不是内置类型和加不加上()
  //一个是构造一个对象            
}
for( int i = 0 ; i < ROWS ; i++ )
{
delete [] dynamicArray[i] ;
//这里也是同样要区别与指针数组的释放啊!前面加上了一个[]!!知道什么意思吧
}
delete [] dynamicArray ; //加个餐!!!!!!!!!!!!
下面描述正确的是

int *p1 = new int[];
int *p2 = new int[](); p1和p2申请的空间里面的值都是随机值
p1和p2申请的空间里的值都已经初始化
p1申请的空间里的值是随机值,p2申请的空间里的值已经初始化(对)
p1申请的空间里的值已经初始化,p2申请的空间里的值是随机值
解释
在C++primer(第5版)中关于new的讨论有:
、new当个对象
new在自由空间分配内存,但其无法为其分配的对象命名,因次是无名的,分配之后返回一个指向该对象的指针。 int *pi = new int; // pi指向一个动态分配的,未初始化的无名对象
此new表达式在自由空间构造一个int类型对象,并返回指向该对象的指针。 默认情况下,动态分配的对象是默认初始化的,这意味着内置类型或组合类型的对象的值是无定义的,而类类型对象将用默认构造函数进行初始化。 、new(多个对象)数组
new分配的对象,不管单个对象还是多个对象的分配,都是默认初始化。但可以对数组进行值初始化,方法就是:在大小之后添加一对空括号。 int *pia = new int[]; // 10个未初始化int
int *pia2 = new int[](); // 10个值初始化为0的int int *p2 = new int[]();申请了空间,而且进行了初始化int *p1 = new int[];只申请空间,没有进行初始化原因:对于一些结构体,我们可以看到()往往表示构造函数,int是基本类型算初始化吧理由:你可以测试输出两种的值你会发现p1的值未知,而p2清零了 new运算符只是申请分配一个内存空间而已,因为不知道为其分配对象的名称,所以分配之后返回的只是一个指向该对象的指针,并没有初始化,加上一个()后,就相当于调用了默认构造函数,会默认初始化,用0来初始化

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

2 vector of vector

#include <vector>
using namespace std; #define ROWS 4
#define COLUMNS 4
vector<vector<int> > dynamicArray(ROWS, vector<int>(COLUMNS)); for(int i = 0;i < dynamicArray.size();++i)//有错 int i 类型 不对 与size()函数不匹配啊
{
for(int j = 0;j < dynamicArray[i].size();++j)//有错
{
dynamicArray[i][j] = i*j;
}
} for(int i = 0;i < dynamicArray.size();++i)//这里有错误 自己找 同上
{
for(int j = 0;j < dynamicArray[i].size();++j)//有错
{
cout << dynamicArray[i][j] << endl;
}
}

最新文章

  1. FileReader:读取本地图片文件并显示
  2. java容器的一些存取用法
  3. 如何搭建Java开发环境(包括下载、安装和配置JDK)和Eclipse的安装
  4. 一些java方法,一些感想
  5. 理解RxJava:(二)Operator,Operator
  6. PYTHON实现HTTP摘要认证(DIGEST AUTHENTICATION)
  7. hive复杂类型与java类型的对应
  8. poj 1125 Stockbroker Grapevine dijkstra算法实现最短路径
  9. 实例化的两种方法(new和函数法)
  10. 利用switch语句进行多选一判断。
  11. java 实现多种排序
  12. Android获取网络数据进行GZIP解压
  13. 设置input中placeholder的样式(placeholder设置字体)
  14. Oozie简单配置与使用
  15. Network POJ - 3694 (连通图标求桥)
  16. pyqt5 点开小窗口
  17. R语言多层绘图
  18. 函数使用八:BP_EVENT_RAISE
  19. VMware10 安装centos6.7 设置NAT模式固定ip
  20. MongoVUE的Collections数据不显示的解决方法

热门文章

  1. protocol buffers的使用示例
  2. SRA数据转成fastq
  3. svn冲突问题详解 SVN版本冲突解决详解
  4. WinForm(C#)相关知识和经验的碎片化记录
  5. Linux下遇到的操作 (持续更新……)
  6. C#.Net使用正则表达式抓取百度百家文章列表
  7. C#单例---饿汉式和懒汉式
  8. CentOS6.5上Zabbix3.0的RPM安装【一】-安装并配置Server
  9. tomcat Linux安装
  10. 安卓--ListView