new/malloc 分配二维数组存储空间

动态分配二维数组空间,常用的方法是:

先开辟一个指向指针的指针 p ,将其指向指针数组 ; 然后将指针数组中每一个指针指向一维存储空间 。

下面以分别以new和malloc来举例说明:

Sample 1:用new 开辟一个 形如 int  a[3][4] 的存储空间:

#include <iostream>
using namespace std;

int main()
{
//开辟空间
int **p;
p=new int*[3];
int i,j;
for(i=0;i<3;i++)
	p[i]=new int[4];
//对其赋值
for(i=0;i<3;i++)	
	for(j=0;j<4;j++)
		p[i][j]=1;
//输出
for(i=0;i<3;i++)
{
	for(j=0;j<4;j++)
		cout<<p[i][j]<<" ";
	cout<<endl;
}
return 0;
}

Sample 2:用malloc 开辟同样的空间,不同之处是

1、#include <stdlib.h> 

2、malloc需要强制类型转换(原因请自行搜索 malloc 用法)

同样以形如 int  a[3][4] 为例

#include <iostream>
#include <stdlib.h>
using namespace std;

int main()
{
//开辟空间
int **p;
p=(int **)malloc(3*sizeof(int *));
int i,j;
for(i=0;i<3;i++)
	p[i]=(int *)malloc(4*sizeof(int));
//对其赋值
for(i=0;i<3;i++)	
	for(j=0;j<4;j++)
		p[i][j]=1;
//输出
for(i=0;i<3;i++)
{
	for(j=0;j<4;j++)
		cout<<p[i][j]<<" ";
	cout<<endl;
}
return 0;
}


Sample 3:char 类型二维数组 空间开辟

char 类型二维数组 开辟方法与 int 一样:

char  a[3][4] 为例:

#include <iostream>
#include <stdlib.h>
using namespace std;

int main()
{
//开辟空间
char **p;
p=(char **)malloc(3*sizeof(char *));
int i,j;
for(i=0;i<3;i++)
	p[i]=(char *)malloc(4*sizeof(char));
//对其赋值
for(i=0;i<3;i++)	
	for(j=0;j<4;j++)
		p[i][j]='1';
//输出
for(i=0;i<3;i++)
{
	for(j=0;j<4;j++)
		cout<<p[i][j]<<" ";
	cout<<endl;
}
return 0;
}


Smaple 4:char a[3][4] 另一种开辟的方法:

《剑指offer》中看到另一种方法:

//开辟空间
	char **p;
	p=(char **)(new int[3]);
	for(int i=0;i<3;i++)
	p[i]=new char[4];

其中 p=(char **)(new  int [3])的效果与 p=new char *[3]  效果一样,

只不过先开辟了一个指向一维数组的指针(new int[3] ,假定为 s),如下:


其次,进行强制类型转换,将 s 强制转换为 ( char **) 类型 p



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值