这篇帖子主要介绍二维空间内存,但是有些地方还不是很懂请大神指点。
#include <iostream>
int ** Malloc( int m, int n)
{
int **p;
p =(int **) malloc(sizeof(int*)*m);
for(int i = 0; i< n; i++)
{
*(p+i) = (int*)malloc(sizeof(int *)*n);
}
int c= 0;
for(i = 0; i < m; i++)
for(int j = 0; j< n; j++)
{
p[i][j] = c++;
}
return p;
}
int ** Malloc2( int m, int n)
{
int **p;
p =new int*[m];
for(int i = 0; i< n; i++)
{
*(p+i) = new int[n];
}
int c= 0;
for(i = 0; i < m; i++)
for(int j = 0; j< n; j++)
{
p[i][j] = c++;
}
return p;
}
void main()
{
int m = 2;
int n = 3;
int **ptr = Malloc2(m,n);
for(int i = 0; i < m; i++)
for(int j = 0; j< n; j++)
{
printf("%d",ptr[i][j]);
}
char **ptr1=NULL;
char *ptr2[4] = {"abs","cds","sss","333"};
ptr1 = ptr2; //这样不是很懂
printf("%s",ptr1[0]);
}
void delete1()
{
int MaxCOL = 3;
int nRow = 4;
int *pp_arr = new int[nRow*MaxCOL];
int (*p)[MaxCOL] = (int(*)[MaxCOL])pp_arr;
int i,j;
for(i = 0; i < nRow; i++)
for(j = 0; j < MaxCOL; j++)
p[i][j] = i + j;
for(i = 0; i < nRow; i++)
{
for(j = 0; j < MaxCOL; j++)
printf("%d\n", p[i][j]);
}
delete[] pp_arr;
//return 0;
}
void delete2()
{
int MaxCOL = 3;
int nRow = 4;
int i;
int j;
int **p = (int **)malloc(4*nRow + 4*MaxCOL*nRow);
memset(p, 0, 4*nRow + 4*MaxCOL*nRow);
int *head = (int *)((int *)p + 4*nRow);
while(nRow--)
{
p[nRow] = (int *)(head + nRow*MaxCOL*4);
}
nRow = 4;
for(i = 0; i < nRow; i++)
for(j = 0; j < MaxCOL; j++)
p[i][j] = i + j;
nRow = 4;
for(i = 0; i < nRow; i++)
{
for(j = 0; j < MaxCOL; j++)
printf("%d\n", p[i][j]);
}
}