分类:
2008-10-13 16:34:08
最近,经常看到在论坛的VC板块看到有人问有关于动态创建二维数组的人,自己准备写一篇出来。
记得自己刚学习C的时候,就需要学习数组,不过在学校里,我最多就是学到了二维数组,并且自己使用的也绝大部分是一维数组。后来,快毕业的时候,程序中需要一个使用动态的二维数组,那时候没有老师可以请教,自己摸索着,竟然被我弄出来了一段代码,可以动态创建二维数组(这段代码有可能是不正确的,希望行家不要取笑,只需要提出意见就可以了):
#include <stdio.h>
#include <iostream.h>
const int ROW = 10;
const int
int main()
{
int iRow=0, iCol=0;
//创建数组
cout<<"Create array"<<endl;
int **ppint = new int*[ROW];
for(iRow=0;iRow<ROW;iRow++){
ppint[iRow] = new int[
}
//进行计算
cout<<"TODO sth."<<endl;
for(iRow=0;iRow<ROW;iRow++){
for(iCol=0;iCol<
ppint[iRow][iCol] = iRow+iCol;
}
}
//输出
cout<<"use the array"<<endl;
for(iRow=0;iRow<ROW;iRow++){
for(iCol=0;iCol<
cout<<"["<<iRow<<"]["<<iCol<<"]"<<ppint[iRow][iCol]<<";";
}
cout<<endl;
}
//删除
cout<<endl<<"Now, delete the array"<<endl;
for(iRow=0;iRow<ROW;iRow++){
delete[] ppint[iRow];
}
delete[] ppint;
ppint = NULL;
//
cout<<"Press return to exit......."<<endl;
getchar();
return 0;
}
上面的代码,演示了怎样创建、使用以及删除一个二维数组。这段代码虽然是我刚刚写的,但是早已成型于2002年底。我不知道这段代码创建一个二维数组有什么错误,但是一直到现在我仍在使用。
------------------------------------------------------------------------------
上面的代码,是我自己琢磨出来的。后来,2003年来到北京工作,一个偶然的机会,看到C/C++有一个模板库,支持动态创建二维数组与删除二维数组,再后来,又在网上看到有人提供了一个宏来创建二维数组。
关于那个创建与删除二维数组的模板,这下子我忘记了,自己写了一个类似的(如果写错了,还是那句话:只需要贴出正确的就可以了,少量的批评也行,就是不要骂人了)
#include <stdio.h>
#include <iostream.h>
template <class T>
T** CreateMatrix(int nRow, int nCol)
{
T **ppT = new T*[nRow];
for(int iRow = 0;iRow<nRow;iRow++){
ppT[iRow] = new T[nCol];
}
return ppT;
}
template <class T>
void DeleteMatrix(T ***pppT, int nRow)
{
for(int iRow=0; iRow<nRow; iRow++){
delete[] (*pppT)[iRow];
}
delete[] (*pppT);
(*pppT) = NULL;
}
const int ROW = 10;
const int
int main()
{
int iRow=0, iCol=0;
//创建数组
cout<<"Create array"<<endl;
int **ppint = CreateMatrix<int>(ROW,
//进行计算
cout<<"TODO sth."<<endl;
for(iRow=0;iRow<ROW;iRow++){
for(iCol=0;iCol<
ppint[iRow][iCol] = iRow+iCol;
}
}
//输出
cout<<"use the array"<<endl;
for(iRow=0;iRow<ROW;iRow++){
for(iCol=0;iCol<
cout<<"["<<iRow<<"]["<<iCol<<"]"<<ppint[iRow][iCol]<<";";
}
cout<<endl;
}
//删除
cout<<endl<<"Now, delete the array"<<endl;
DeleteMatrix<int>(&ppint, ROW);
//
cout<<"Pres return to exit......."<<endl;
getchar();
return 0;
}
经过我的测试,输出的结果是一样的。
------------------------------------------------------------------------------
至于那个使用宏来生成二维数组,个人不推荐,所以这里也就不贴出来了(主要是自己手头没有,而自己又懒得不愿意写)。
------------------------------------------------------------------------------
题外话:自己本来想测试一下这段代码是否正确的(虽然在实际使用中是正确的),想把内存中的内容给分析一下,但是发现自己是在使看不懂二维数组在内存中的表示。如果有谁能够分析验证一下,hengai先在这里谢过了!