关闭

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

标签: newmalloc动态分配CC++
200人阅读 评论(0) 收藏 举报
分类:

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

先开辟一个指向指针的指针 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



0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1564次
    • 积分:55
    • 等级:
    • 排名:千里之外
    • 原创:4篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章存档