发布日期:2016-02-29 09:47 来源: 标签: 编程语言 C++开发语言 C++二维数组 C++多维数组
本章我们主要学习C++中一维数组与多维数组的动态分配(new)与释放(delete),下面们就做一下具体讲解,希望大家多多支持中国站长网络学院。
1. 一维数组
对于简单的一维数组动态内存分配和释放,如下:
int *array1D;//假定数组长度为m
//动态分配空间
array1D = new int [m];
//释放
delete [] array1D;
2. 二维数组
二维数组的动态分配和释放
//假定数组第一维长度为m, 第二维长度为n
//动态分配空间
int **array2D = new int *[m];
for( int i=0; i
P.S. 事实上二维数组空间的释放还可以更简单地用:delete [] array2D;
二维数组的另一种分配和释放形式:
//假设第一维长为m,第二维长为n
//动态分配空间
int** array2D=new int*[m]; array2D[0]=new int[m*n]; for(int i=1;i//释放delete [] array2D[0];

3. 三维数组
三维数组的动态分配和释放
int ***array3D;//假定数组第一维为m, 第二维为n, 第三维为h
//动态分配空间
array3D = new int **[m];
for( int i=0; i 
4. 二维数组的一个例子
其中的析构函数用到了delete,构造函数用到了new进行分配。
// W4-课程作业-填空题1-3.cpp : Defines the entry point for the console application.
/*
写一个二维数组类 Array2,使得下面程序的输出结果是:
输入

输出
0, 1, 2, 3,
4, 5, 6, 7,
8, 9, 10, 11,
next
0, 1, 2, 3,
4, 5, 6, 7,
8, 9, 10, 11,
*/
#include stdafx.h
#include 
#include 
using namespace std;
// 在此处补充你的代码
class Array2
{
private:
int hang, lie;
int **iar;
public:
Array2() :hang(0), lie(0), iar(NULL) {}
Array2(int h, int l) :hang(h), lie(l)
{
iar = new int*[h];
iar[0] = new int[h*l];
for (int i = 1; i < h; ++i)
iar[i] = iar[i - 1] + l;
}
~Array2()
{
//cout << ;
if (iar != NULL)
{
delete[] iar[0];  //delete的方式要对,不然就会出现_Block_Type_Is_Valid (pHead->nBlockUse) Error
delete[] iar;
}
}
int*& operator[](int m)
{
return iar[m];
}
const int operator() (int m, int n)
{
return iar[m][n];
}
Array2& operator=(const Array2& ar)
{
if (ar.iar == iar) return *this;
if (iar != NULL)
{
for (int i = 0; i < hang; ++i)
delete[] iar[i];
delete[] iar;
}
if (ar.iar != NULL)
{
hang = ar.hang;
lie = ar.lie;
iar = new int*[hang];
iar[0] = new int[hang*lie];
for (int i = 1; i < hang; ++i)
iar[i] = iar[i - 1] + lie;
for (int i = 0; i < hang; ++i)
for (int j = 0; j < lie; ++j)
iar[i][j] = ar.iar[i][j];
}
else
{
hang = 0;
lie = 0;
iar = NULL;
}
return *this;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
Array2 a(3, 4);
int i, j;
for (i = 0; i < 3; ++i)
for (j = 0; j < 4; j++)
a[i][j] = i * 4 + j;
for (i = 0; i < 3; ++i) {
for (j = 0; j < 4; j++) {
cout << a(i, j) << ,;
}
cout << endl;
}
cout << next << endl;
Array2 b;     
b = a;
for (i = 0; i < 3; ++i) {
for (j = 0; j < 4; j++) {
cout << b[i][j] << ,;
}
cout << endl;
}


return 0;
}




 

相关评论

专题信息
    Visual C++是一个功能强大的可视化软件开发工具,是高等院校计算机及相关专业主要核心课程。 本教程对Visual C++ 的应用与开发进行了详细系统的介绍,内容主要包括:Visual C++程序的建立,菜单、工具栏和状态栏的创建,对话框和常用控件,窗口、文档与视图,图形绘制,数据库应用,多媒体技术等。 本教程以案例教学为主,各章节都附有大量的实例,并且操作步骤详细,有利于引导读者更好的消化、理解和实际应用本章节所学的知识内容,希望大家能多多支持中国站长网络学院!