动态数组的创建

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

摘要的重要性是不言而喻的,每次发文章我都很纠结如何写出一个有特色的摘要来,能够以最为简短的文字向读者描述出我所要表达的东西。但是常常出现的问题是,摘要写得太简短了,读者看了不清楚文章究竟要讲啥;摘要写得稍微长点的话自然能够描述清楚所要表达的东西,但是却也出现了另外一个问题,就是读者看到大段的文字描述,觉得枯燥无味,直接二话不说给文章判了个“死刑”,导致这种情况下愿意真正的花时间看完摘要的读者屈指可数,更不用说文章的正文部分了,所以时长感慨写文章最头疼的莫过于摘要了。

很多人在编写C语言代码的时候很少使用动态数组,不管什么情况下通通使用静态数组的

方法来解决,在当初学习C语言的时候我就是一个典型的例子,但是现在发现这是一个相

当不好的习惯,甚至可能导致编写的程序出现一些致命的错误。尤其对于搞嵌入式的人来所,嵌入式系统的内存是宝贵的,内存是否高效率的使用往往意味着嵌入式设备是否高质量和高性能,所以高效的使用内存对我们来说是很重要的。那么我们在自己编写C语言代码的时

候就应该学会使用动态数组,这也就是我这篇博客要给大家讲的,我尽我所能的用一些简单的代码来讲解动态数组,希望我所讲的对你有所帮助。

那么我们首先来看看什么是动态数组,动态数组是相对于静态数组而言,从“动”字我们也可以看出它的灵活性,静态数组的长度是预先定义好的,在整个程序中,一旦给定大小后就无法改变。而动态数组则不然,它可以随程序需要而重新指定大小。动态数组的内存空间是从堆动态分配的。是通过执行代码而为其分配存储空间。当程序执行到我们编写的分配语句时,才为其分配。对于静态数组,其创建非常方便,使用完也无需释放,要引用也简单,但是创建后无法改变其大小是其致命弱点!对于动态数组,其创建麻烦,使用完必须由程序员自己释放,否则将会引起内存泄露。但其使用非常灵活,能根据程序需要动态分配大小。所以相对于静态数组的来说我们对于使用动态数组有很大的自由度。

在创建动态数组的过程中我们要遵循一个原则,那就是在创建的时候从外层往里层,逐层创建;而释放的时候从里层往外层,逐层释放。这个话你读了可能理解并不深刻,不过不要急,接下来我们看看两段代码。

一维动态数组的创建:

#include

#include

int main()

{

int n1,i;

int *array;

printf("请输入所要创建的一维动态数组的长度:");

scanf("%d",&n1);

array=(int*)calloc(n1,sizeof(int));

for(i=0;i

{

printf("%d\t",array[i]);

}

printf("\n");

for(i=0;i

{

array[i]=i+1;

printf("%d\t",array[i]);

}

free(array);//释放第一维指针

return 0;

}

运行结果为:

特此说明:在以后的运行结果部分,我均会附上文字结果,以防图片打开失败。

请输入所要创建的一维动态数组的长度:4

0 0 0 0

1 2 3 4 Press any key to continue

在此我使用的是calloc()函数来分配的,同时也使用两个for语句来打印数组元素,我们发现第一个打印输出的数组元素值均为0,在此也是为了加深读者对于calloc()函数的印象我特地使用了它来分配,如果对于calloc()、malloc()、realloc()函数的区别还是很清楚的读者可以去看看我的另外一篇博客------C语言的那些小秘密之内存分配。

二维数组的创建:

#include

#include

int main()

{

int n1,n2;

int **array,i,j;

printf("请输入所要创建的动态数组的第一维长度:"); scanf("%d",&n1);

printf("请输入所要创建的动态数组的第二维长度:"); scanf("%d",&n2);

array=(int**)malloc(n1*sizeof(int*)); //第一维

for(i=0;i

{

array[i]=(int*)malloc(n2* sizeof(int));//第二维

}

for(i=0;i

{

for(j=0;j

{

array[i][j]=i*n2+j+1;

printf("%d\t",array[i][j]);

}

printf("\n");

}

for(i=0;i

{

free(array[i]);//释放第二维指针

}

free(array);//释放第一维指针

return 0;

}

运行结果为:

请输入所要创建的动态数组的第一维长度:3

请输入所要创建的动态数组的第二维长度:3

1 2 3

4 5 6

7 8 9

Press any key to continue

有了上面的代码我们再来说动态数组的建立就简单了,以二维为例,先说创建,还记得我们上面说的创建的原则嘛:从外层往里层,逐层创建。

array=(int**)malloc(n1*sizeof(int*)); //第一维

以上是我们创建二维动态数组的最外层,创建好了最外层那么我们接下来就是要创建次外层了。

array[i]=(int*)malloc(n2* sizeof(int));//第二维

在创建次外层的过程中我们使用了一个for喜欢语句,千万别忘了使用for循环语句,这是绝大多数人的一个易错点。

创建好了接下来我们该讲到释放了,而释放的时候从里层往外层,逐层释放。刚刚与我们上面的创建相反,在以上代码中我们首先使用了下面一个for循环来释放里层。

for(i=0;i

{

free(array[i]);//释放第二维指针

}

相关文档
最新文档