牛骨文教育服务平台(让学习变的简单)
博文笔记

博客第一篇:C语言处理动态数组

创建时间:2016-05-29 投稿人: 浏览次数:1273

      新手一枚,零零碎碎学习了一些东西,不过一直也没有写博客的习惯。觉得在空闲时间还是应该抽时间写一写记一记,这样有对于自己进行总结,同时也能做一个参考。好了,闲话就不多说了,直接进入我的第一篇博客正文


      在学习C语言的时候,我们经常会遇到数组。更多的时候我们处理的数组都是固定长度的,或者说我们处理的数组长度都是已知的。但是有时候我们会遇到数组长度不明确的情况,如用数组保存用户从键盘输入一系列数字,直到用户输入数字0输出提示内容并退出输入。C语言处理动态数组在应用中是不可避免的,下面介绍在C语言里处理动态数组的常用方法。(当然用java或者C++都是很容易解决的)。

      应用背景: 用户由键盘输入一系列数字,当输入数字0时输出提示信息:input breakout,并退出输入。

IDE: VS2013

      本方法主要使用malloc和memcpy以及realloc函数来处理动态数组,以10作为一个基 准,当用户超过10,当用户输入数组的个数是n(n>10),就开始用malloc申请内存,新开辟的内存由用户指定,例如:当用户输入20个数字的时候还没出现数字0 ,此时新开辟的内存大小可以是pow(2,20/10)*4bytes,或者也可以是(2*20/10)*4bytes。内存大小的开辟比较灵活,可以根据用户的实际情况而定。

malloc()原型:void *malloc(unsigned int num_bytes);

realloc()原型: void *realloc(void *mem_address, unsigned int newsize);

memcpy()原型:void *memcpy(void *dest, const void *src, size_t n);


#include<stdlib.h>
#include<math.h>  
#include<string.h>  
#define SIZE_int 10  
void main()  
{     
     int data[10];  
     int *p, *pt;  
     p = data;  
     p = (int *)malloc(4 * SIZE_int);  
     int capacity = SIZE_int;  
     int n=0;  
     printf("please input the data until the input data is    zero :
");  
     for (int i = 0; i < 100; i++)//预判输入的数字个数不会超过100个  
     {  
         scanf_s("%d", p + i);  
         n = i / capacity;  
         if (*(p + i) == 0)  
         {  
             printf("input breakout :
");  
             free(p);  
             free(pt);  
             pt = NULL;  
             p = NULL;  
             break;//退出输入  
         }  
         if ((*(p + i) != 0) && (n >= 1))  
         {  
             pt = (int*)realloc(p, pow(2, n)*capacity);  
             memcpy(pt, p, 4 * sizeof(i));  
         }  
     }        
   system("pause");        
}  

用户输入数字实验结果

      当然,C语言能处理动态数据的除了数组还有一些其他的数据结构,包括链表等。只不过数组存储数据地址是连续,链表地址不连续。链表存储数据也有独特的功能。

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。