C++ 在堆上开辟与释放二维、三维指针

//C++ 在堆上开辟与释放二维、三维指针

#include<iostream>

using namespace std;

int main()

{

//二级指针的开辟与释放

int number = 0;

int** p = new int*[4];

for(int i = 0; i < 4; i++) //分级定义数组大小

{

p[i] = new int[4];

}

for(int i = 0; i < 4; i++)

{

for(int j = 0; j < 4; j++)

{

p[i][j] = number++;

}

}

for(int i = 0; i < 4; i++)

{

for(int j = 0; j < 4; j++)

{

cout << p[i][j] << endl;

}

}

for(int i = 0; i < 4; i++) //分级释放堆上的指针内存

{

delete[] p[i];

}

delete []p;

int*** pp = new int**[4];

for(int i = 0; i < 4; i++) //分级定义数组大小

{

pp[i] = new int*[4];

for(int j = 0; j < 4; j++)

{

pp[i][j] = new int[4];

}

}

number = 0;

for(int i = 0; i < 4; i++)

{

for(int j = 0; j < 4; j++)

{

for(int k = 0; k < 4; k++)

{

pp[i][j][k] = number++;

}

}

}

for(int i = 0; i < 4; i++)

{

for(int j = 0; j < 4; j++)

{

for(int k = 0; k < 4; k++)

{

cout << pp[i][j][k] << " ";

}

}

}

for(int i = 0; i < 4; i++) //分级释放堆上的数组内存

{

delete []pp[i];

for(int j = 0; j < 4; j++)

{

delete []pp[i][j];

}

}

return 0;

}

时间: 2024-11-10 00:54:01

C++ 在堆上开辟与释放二维、三维指针的相关文章

C++在堆上申请和释放内存 - new &amp; delete

// 动态申请内存, 指向一个未初始化的整型 int *pi = new int; // pi指向一个整型值,初始化为0 int *pi = new int(); // value of i is 1024 int i(1024); // pi指向1024 int *pi = new int(1024); // value of  s is "99999" string s(5, '9'); // *ps is "999999" string *ps = new s

关于返回二维数组指针问题

所谓的二维数组指针,是指针的指针,指的就是二维数组在内存中的存储地址. 二维数组的地址与一维数组的地址的不同点是:它除了有元素地址外,还有标识各行起始位置的行首地址(称为行的首地址).行的首地址和行的首元素的地址具有相同的地址值,但是它们是两种不同的地址:若有定义int a[5][5]:则a[0][0]是a数组 首行首列元素(代表该元素的值).而&a[0][0]是首行首元素的地址.&&a[0][0]则是首行的首地址.从这个意义上讲,可以说行的首地址是一种二重地址,即指针的指针. 废

HDU 3404&amp;POJ 3533 Nim积(二维&amp;三维)

(Nim积相关资料来自论文曹钦翔<从"k倍动态减法游戏"出发探究一类组合游戏问题>) 关于Nim积计算的两个函数流程: 代码实现如下: int m[2][2]={0,0,0,1}; int Nim_Multi_Power(int x,int y) { if(x<2) return m[x][y]; int a=0; for(;;a++) if(x>=(1<<(1<<a))&&x<(1<<(1<<

二维数组指针

关于一维数组的指针 例子: int a[3]={1,2,3}; int *p=a; printf("%d",*p); 输出为1 一维数组指针就是该一维数组第一元素的地址,取值运算*结果是第一个元素存储值. 再看二元数组 例子: int v[2][5]={{1,2,3,4,5},{6,7,8,9,10}}; int (*a)[5]=v; printf("%p,%p\n",a,a+1); printf("%p,%p\n",*a,*(a+1)); 输出

二维数组指针及二维动态数组的分配问题

在我以前的文章中都有讲过关于数组指针及指针数组的相关问题,但是讲得不够深入,我后来后了别人写的博客后觉得人家的确实写得好, 也学到了不少东西,对以前的问题有深的领悟了,于是准备结合这些博客和文章再稍微深入一点讲讲这些问题.这些指针的问题是C语言中的基础与关键 而且一旦出现这些问题,不太好找bug的来源,有时候不得不借助反汇编. 参考文章: http://c.biancheng.net/cpp/html/476.html       C语言指针数组和数组指针 http://blog.csdn.ne

C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com

原文:C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 本文由 arthinking 发表于315 天前 ⁄ itzhai.com原创文章 ⁄ C语言 ⁄ 评论数 3 ⁄ 被围观 1,775 views+ 指针数组: 在一个数组中,如果它的元素全部都是指针类

关于 二维数组指针

概括的说,指针其实就是可变数组的首地址,说是可变数组,是 指其包含内容的数量的可变的,并且是可动态申请和释放的,从而充 分节约宝贵的内存资源.我一向喜欢一维数组,除非万不得已,我一 般是不用二维数组的,多维的则更是很少涉足了.因为一维简单,容 易理解,而用指针指向的多维数组就具有相当的复杂性了,也因此更 具有讨论的必要.     闲话少说,这里我就以三个二维数组的比较来展开讨论:     (1).int **Ptr;     (2).int *Ptr[ 5 ];     (3).int ( *P

C语言数组篇(五)多级指针和二维数组指针的区别

多级指针 以二级指针为例 二级指针的由来是 指针数组 的指针形式. int *p[10] 读取的顺序是 p[10] --> 10个空间的数组 * p[10] --> 这10个空间的数组里面存放的数据都是 指针型的数据 int *p[10] --> 数组里面每个指针指向的空间存放的是int型的数据 int *p[10] --> int **p; p: 指针数组的数组名,也是数组的首地址. *p 数组里面存放的指针 **p 数组里面存放的指针 指向的空间 的内容 二维数组指针: 二维数

&lt;24&gt;【掌握】二维数组指针定义、初始化+

[掌握]二维数组指针定义.初始化 数组指针: 定义一个指针变量,让这个指针变量指向一维数组的元素 二维数组指针 行指针,用来指向二维数组的每一行,存放的是行的首地址 定义格式: 数据类型 (*行指针变量名)[数组第二维的长度]; 二维数组指针的初始化 int a[2][3]; int b[2][2]; float f1[4][4]; //假设我要定义一个指向数组a的一个行指针 // a = &a[0] = &a[0][0] = a[0] int (*p)[3] = a; 二维数组指针的使用