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



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

二维指针的malloc内存分配

写代码的时候会碰到多维数组的内存分配和释放问题,在分配和释放过程中很容易出现错误。...
  • TuYoungTuSimple
  • TuYoungTuSimple
  • 2016年09月14日 16:20
  • 2472

用malloc动态申请一个二维数组的三种方法

方法一:利用二级指针申请一个二维数组。 https://github.com/fengxinlinux/code.git
  • fengxinlinux
  • fengxinlinux
  • 2016年05月30日 20:56
  • 14192

用malloc动态分配二维数组

转自:http://blog.csdn.net/fqc0306/article/details/6686673 C语言提供类似于矩阵的多维数组,在一些进行数学运算的程序中会经常用到。...
  • qq1987924
  • qq1987924
  • 2015年01月05日 21:48
  • 1220

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

使用new申请空间: 特点:         1、没有名字,只能通过指针间接访问它们。         2、从堆中申请空间 分类: 变量:           语法:指针变量 = new ...
  • txl16211
  • txl16211
  • 2015年03月30日 20:59
  • 1771

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

malloc 和 realloci
  • chunnixiahua
  • chunnixiahua
  • 2014年08月06日 16:34
  • 541

new/delete多维数组/malloc分配动态二维数组

new用法:   1.开辟单变量地址空间   1)new int; //开辟一个存放数组的存储空间,返回一个指向该存储空间的地址.int *a = new int 即为将一个int类型的地址赋 ...
  • u014082714
  • u014082714
  • 2015年03月30日 21:40
  • 2290

二维数组声明和初始化: 数组下标方式,指针+malloc方式, 指针+new()动态创建

#include #include #include using namespace std; int main() { double array0[3][2]; cout
  • zlf19910726
  • zlf19910726
  • 2017年12月07日 20:15
  • 65

c++中使用new动态分配存储空间

下面这个例子,检验new给double型数组分配的存储空间的首地址是多少。s是指向这个数组的指针,s+1即是指针移动一位,指向下一个元素。 [root@sparkmaster test]# cat ...
  • qingyang0320
  • qingyang0320
  • 2016年01月17日 16:10
  • 305

第十五周 项目3:(2)用new和delete运算符进行动态分配的撤销存储空间

/* *Copyright (c)2014,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:read.cpp *作 者:刘天恩 *完成日期:201...
  • ltn21999
  • ltn21999
  • 2014年12月04日 14:57
  • 313

用malloc动态分配二维数组

C语言提供类似于矩阵的多维数组,在一些进行数学运算的程序中会经常用到。从形式 上看多维数组是由多个一维数组组成的,但C语言处理多维数组的方法和一维数组一样,都是线性存储,连续分配存储空间,可以用带偏移...
  • fqc0306
  • fqc0306
  • 2011年08月14日 20:31
  • 1299
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:new/malloc 分配二维数组存储空间
举报原因:
原因补充:

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