new一个二维数组

4 篇文章 0 订阅
⑴new可用来生成动态无名变量,  
 如 
int *p=new int;  
int *p=new int [10]; //动态数组的大小可以是变量或常量;而一般直接声明数组时,数组大小必须是常量  
 又如:
int *p1; 
double *p2; 
p1=new int(12);  
p2=new double [100];  
l 分别表示动态分配了用于存放整型数据的内存空间,将初值12写入该内存空间,并将首地址值返回指针p1;   
l 动态分配了具有100个双精度实型数组元素的数组,同时将各存储区的首地址指针返回给指针变量p2;  
 对于生成二维及更高维的数组,应使用多维指针。   
以二维指针为例   
int **p=new int* [row]; //row是二维数组的行,p是指向一个指针数组的指针   
for(int i=0; i<row; i++)   
p[i]=new int [col]; //col是二维数组的列,p是指向一个int数组的指针   
删除这个二维数组   
for(int i = 0; i < row;i++)   
delete []p[i]; //先删除二维数组的列   
delete []p;   
⑵使用完动态无名变量后应该及时释放,要用到 delete 运算符   
delete p; //释放单个变量   
delete [ ] p;//释放数组变量(不论数组是几维)   
相比于一般的变量声明,使用new和delete 运算符可方便的使用变量。

定义二维数组char array[x][y]; 
1.只定义个一维的就可以了 
char *array; 
array = new char[x*y]; 
访问的时候*(array+i*y+j)表示array[i][j] 
2.定义一个二维数组 
char **array1 
array1 = new char *[x]; 
for(i=0;i<x;++i) 
array1[i] = new char[y]; 
...用的时候可以直接array1[i][j] 
注意delete 
for(i=0;i<x;++i) 
delete[] array1[i]; 
delete[] array1; 
3.要用的方便,可以在array上加定义一个指针变量。 
char *array = new char[x*y]; 
char **array2; 
array2 = new char *[x]; 
for(int i=0;i<x;++i) 
array2[i] = array + i*y; 
...用起来还是array2[i][j],但二维数组已经是一块连续内存,这是和第二种方法区别的地方,感觉这是比较适合用二维数组的习惯。 
delete[] array2; 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值