有错误请大家提出来共同探讨,共同进步
之前的版本有些地方不完善,经张杰指出,(娜姐很好)错误以修正,请大家查阅!!!如果还有问题
请大家提出,共同探讨,予以修改!!! ----彭赞2012-02-27
1.学习内容:
今天学习了内存的动态分配,主要是使用malloc()---free()和new()—delete()!我自己不明白的地方是多维内存的分配,经常忘记了,也没理解清楚。下面是我写的测试程序:
程序1:
#include
#include
#include
voidmain(void)
{
inti,j;
intnum=0;
char(p)[12];//[100][12]
p=malloc(12sizeof(char)100); //这里修改了一下(修改成了为每个数组元素申 //请空间,10012sizeof(char)
for(j=0;j<100;j++)
{
for(i=0;i<12;i++)
{
p[j][i]=''1'';
}
p[j][i-1]=''\0'';
printf("%s",(p));
}
free(p);
}
程序2:
#include
#include
#include
voidmain(void)
{
inti;
intj;
intnum=0;
charp;//[5][12]
p=(char)malloc(5sizeof(char));
for(i=0;i<5;i++)
{
p[i]=malloc(12sizeof(char));
}
for(j=0;j<5;j++)
{
num=0;
for(i=0;i<12;i++)
{
p[j][i]=''a''+num;
num++;
}
}
for(j=0;j<5;j++)
{
for(i=0;i<12;i++)
{
printf("%c",p[j][i]);
}
printf("\n");
}
for(i=0;i<5;i++)
{
free(p[i]);
}
free(p);
}
程序3:
#include
#include
#include
voidmain(void)
{
charpStr;
inti,j,k;
//自己分配一个三维的[3][4][5]
pStr=(char)malloc(3sizeof(char)); //第一维
//分配二维的
for(i=0;i<3;i++)
{
(pStr+i)=malloc(4sizeof(char));
}
//分配三维
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
((pStr+i)+j)=malloc(5sizeof(char));
}
}
//使用分配的内存
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
for(k=0;k<5;k++)
{
pStr[i][j][k]=''a'';
printf("%c",pStr[i][j][k]);
}
printf("\n");
}
}
//释放第三维的内存
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
free((pStr[i][j]));
}
}
//释放第二维的内存
for(i=0;i<3;i++)
{
free(pStr[i]);
}
//释放第一维的内存
free(pStr);
}
感悟:动态分配给多维数组赋值时,只要对数组的概念弄清楚了,就基本上没太大问题,只要注意一个申请和释放的顺序就可以啦,他们的方向是相反的。数组就是一片连续的存储空间,在一片内存中按数组的一维的长度把内存分成若干个数据块。如果是二维的话,就把每个数据块按二维的长度分成若干个数据块。如果维数增加,就把数据块分得越细,内容越多,当然也越难管理。一般我们最多只定义三维。
进行动态分配时,按着数组的思路进行,从一维开始,一次下去,在最后一维之前时,要注意都要malloc(n4)。4是指针所占的长度.指针是地址,地址是整数,整数占四个字节。
|
|