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

原创 2015年07月09日 09:45:35

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

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



版权声明:本文为博主原创文章,转载请标明来源。

相关文章推荐

C++ 动态存储空间的分配和释放 new与malloc的区别

使用new申请空间: 特点:         1、没有名字,只能通过指针间接访问它们。         2、从堆中申请空间 分类: 变量: ...

动态内存的分配,包括 new delete malloc realloc free,一维数组和二维数组

malloc 和 realloci

用malloc动态分配二维数组

C语言提供类似于矩阵的多维数组,在一些进行数学运算的程序中会经常用到。从形式 上看多维数组是由多个一维数组组成的,但C语言处理多维数组的方法和一维数组一样,都是线性存储,连续分配存储空间,可以用带偏移...

new 二维数组的动态分配和删除

本文转自:http://blog.csdn.net/jia_xiaoxin/article/details/3268645 二维数组的动态分配和删除   首先,动态支持数组的分配,必须...

二维数组的动态分配(new)、初始化(memset)和撤销(delete)

转自:http://hi.baidu.com/jian_fei_yang/item/cf49006f5d53620aa0cf0ffe 一维数组的动态分配,初始化和撤销都好说,几乎每一...

二维数组定义以及动态分配空间

下面三种定义形式怎么理解?怎么动态分配空间? (1)、int **Ptr; (2)、int *Ptr[ 5 ]; 我更喜欢写成 int* Prt[5]; (3)、int ( *Ptr )[ 5 ];此...

二维数组定义以及动态分配空间

下面三种定义形式怎么理解?怎么动态分配空间?  (1)、int **Ptr;  (2)、int *Ptr[ 5 ]; 我更喜欢写成 int* Prt[5];  (3)、int ( *Ptr )[...

二维数组定义以及动态分配空间 (转)

二维数组定义以及动态分配空间 (转) 下面三种定义形式怎么理解?怎么动态分配空间?  (1)、int **Ptr;  (2)、int *Ptr[ 5 ]; 我更喜欢写成 ...

二维数组定义以及动态分配空间

下面三种定义形式怎么理解?怎么动态分配空间?  (1)、int **Ptr;  (2)、int *Ptr[ 5 ]; 我更喜欢写成 int* Prt[5];  (3)、int ( *Ptr )[...

二维数组分配,释放空间

http://blog.csdn.net/xcyangfan/article/details/7055028 二维数组申请与释放 [cpp] view pl...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)