#include <malloc.h>
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
double array0[3][2];
cout<<"数组没有初始化,就使用: "<<endl;
for (int i=0;i<3;i++)//输出数组array1
{
for (int j=0;j<2;j++)
{
cout <<setw(2) <<array0[i][j]<<" ";
}
cout <<endl;
}
//
double array1[3][2]={{4,2},{5},{6}};//按行初始化
cout<<"数组 按行初始化 一部分,就使用: "<<endl;
for (int i=0;i<3;i++)//输出数组array1
{
for (int j=0;j<2;j++)
{
cout <<setw(2) <<array1[i][j]<<" ";
}
cout <<endl;
}
//
double array2[3][2]={4,2,5,6};//顺序初始化
cout<<"数组 顺序初始化 一部分,就使用: "<<endl;
for (int k=0;k<3;k++)
{
for (int l=0;l<2;l++)
{
cout <<setw(2) <<array2[k][l];
}
cout <<endl;
}
unsigned int len= sizeof(array1)/sizeof(double);//数组总长度
//列数 == 数组第0行的字节数[sizeof(array1[0])] 除以 数组每个元素占用的字节数[sizeof(double)]
unsigned int COLS = sizeof(array1[0])/sizeof(double);
unsigned int ROWS= len/COLS;
cout<<"size of array1: "<<"ROWS: "<<ROWS<<" COLS: "<<COLS<<endl;
double **Parray2D1 = NULL;
cout<<"sizeof(double*): "<<sizeof(double*)<<endl;
cout<<"Parray2D1 address Before malloc:"<<Parray2D1<<endl;
//
//Parray2D1 = (double **)malloc( ROWS*COLS*sizeof(double) );
//memcpy(Parray2D1, array1, ROWS*COLS*sizeof(double) );
//Parray2D1是一个ROWS行一列的数组,每一个元素存储的是所指向的二维数组对应的这一行的首地址
//(double **)是强制类型转换,因为malloc()只负责分配内存,并不知道这块内存要存储什么类型数据
Parray2D1 = (double **)malloc( ROWS*sizeof(double*) );
cout<<"Parray2D1 address After malloc:"<<Parray2D1<<endl;
for(int r=0; r<ROWS; r++)
{
//给二维数组每一行的首地址赋值
//(double*)是强制类型转换
Parray2D1[r] = (double*)array1 + r*COLS;
}
//
cout<<"malloc()申请内存,memcpy()内存拷贝 Parray2D1: "<<endl;
for (int i=0;i<3;i++)//输出数组array1
{
for (int j=0;j<2;j++)
{
cout <<setw(2) <<Parray2D1[i][j]<<" ";
}
cout <<endl;
}
free(Parray2D1);
Parray2D1 = NULL;
double **Parray2D2 = new double * [ROWS];
for(int r=0; r<ROWS; r++)
{
//给二维数组每一行的首地址赋值
//(double*)是强制类型转换
Parray2D2[r] = (double*)array1 + r*COLS;
}
//
cout<<"new() 动态分配内存 Parray2D2:"<<endl;
for (int i=0;i<3;i++)//输出数组array1
{
for (int j=0;j<2;j++)
{
cout <<setw(2) <<Parray2D2[i][j]<<" ";
}
cout <<endl;
}
free(Parray2D2);
Parray2D2 = NULL;
return 0;
}
输出:
数组没有初始化,就使用:
1.97626e-323 1.08694e-322
3.33648e-317 6.92521e-310
1.97626e-322 1.15069e-316
数组 按行初始化 一部分,就使用:
4 2
5 0
6 0
数组 顺序初始化 一部分,就使用:
4 2
5 6
0 0
size of array1: ROWS: 3 COLS: 2
sizeof(double*): 8
Parray2D1 address Before malloc:0
Parray2D1 address After malloc:0x16361f0
malloc()申请内存,memcpy()内存拷贝 Parray2D1:
4 2
5 0
6 0
new() 动态分配内存 Parray2D2:
4 2
5 0
6 0