c/c++中创建二维数组的方法
方法1:用一维数组代替二维数组
#include <iostream>
#include <memory.h>
#include <stdio.h>
using namespace std;
int main(void)
{
////////////////////////////
int n=2,m=3;
int *a=new int[n*m];
for(int i=0;i<n;i++)
{
cout<<endl;
for(int j=0;j<m;j++)
{
a[i*m+j]=i+j;
cout<<a[i*m+j]<<" "<<&a[i*m+j]<<" ";
}
}
cout<<endl;
delete []a;
}
运行结果:
0 00491BB0 1 00491BB4 2 00491BB8
1 00491BBC 2 00491BC0 3 00491BC4
2 00491BC8 3 00491BCC 4 00491BD0
各个元素的内存地址是递增的,是在堆区里分配的内存空间。
方法2:二维数组
#include <iostream>
#include <memory.h>
#include <stdio.h>
using namespace std;
int main(void)
{
////////////////////////////
int n=2,m=3;
int **a=new int*[n];
for(int i=0;i<n;i++)
{
a[i]=new int[m];
}
for(int i=0;i<n;i++)
{
cout<<endl;
for(int j=0;j<m;j++)
{
a[i][j]=i+j;
cout<<a[i][j]<<" "<<&a[i][j]<<" ";
}
}
cout<<endl;
delete []a;
getchar();
}
其实大家更关心二维数组在内存中是如何分配空间的:
输出结果:
00491B40 00491B44 00491B48
004918D0 004918D4 004918D8
00491890 00491894 00491898
每一行的相邻元素地址是递增的,连续的,不同行之间的地址就不连续了。