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

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


      在学习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 :\n");  
     for (int i = 0; i < 100; i++)//预判输入的数字个数不会超过100个  
     {  
         scanf_s("%d", p + i);  
         n = i / capacity;  
         if (*(p + i) == 0)  
         {  
             printf("input breakout :\n");  
             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语言能处理动态数据的除了数组还有一些其他的数据结构,包括链表等。只不过数组存储数据地址是连续,链表地址不连续。链表存储数据也有独特的功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值