|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- //鱼C论坛——BaysideLizard写于2023年11月24日
- /*更灵活的内存管理方式
- ·malloc
- --申请动态内存空间
- ·free
- --释放动态内存空间
- ·calloc
- --申请并初始化一系列内存空间
- ·realloc
- --重新分配内存空间
- */
- int main()
- {
- int *ptr = NULL;
- int num,i;
- printf("请输入待录入整数的个数:");
- scanf("%d",&num);
- ptr = (int *)malloc(num * sizeof(int));
- if(ptr == NULL)
- {
- exit(1);
- }
- memset(ptr,0,num * sizeof(int));
- /*等价于分配内存空间并初始化
- ptr = (int *)calloc(8,sizeof(int));
- */
- for(i = 0;i < num;i++)
- {
- printf("请录入第%d个整数:",i+1);
- scanf("%d",&ptr[i]);
- }
- printf("您录入的数字是:");
- for(i = 0;i < num;i++)
- {
- printf("%d ",*(ptr+i));
- }
- putchar('\n');
- free(ptr);
- int *ptr1 = NULL;
- int *ptr2 = NULL;
- //第一次申请的内存空间
- ptr1 = (int *)malloc(10 * sizeof(int));
- if(ptr1 == NULL)
- {
- exit(1);
- }
- for(i = 0;i < 10;i++)
- {
- ptr1[i] = i;
- }
- //假设ptr1申请的内存空间不够用了。
- //第二次申请内存空间。
- ptr2 = (int *)calloc(20,sizeof(int));
- if(ptr2 == NULL)
- {
- exit(1);
- }
- //将ptr1的数据拷贝到ptr2中。
- memcpy(ptr2,ptr1,10 * sizeof(int));
- free(ptr1);
- //对ptr2申请的内存空间进行操作。
- for(i = 10;i < 20;i++)
- {
- ptr2[i] = i;
- }
- for(i = 0 ;i < 20;i++)
- {
- printf("%d ",ptr2[i]);
- }
- free(ptr2);
- putchar('\n');
- //以下程序不用malloc,用realloc实现malloc
- int numa;
- int count = 0;
- int *ptra = NULL;//注意:这里必须初始化为NULL
- do
- {
- printf("请输入一个整数(输入-1表示结束):");
- scanf("%d",&numa);
- count++;
- ptra = (int*)realloc(ptra,count * sizeof(int));
- //ptra为NULL,此时realloc相当于malloc
- if(ptra == NULL)
- {
- exit(1);
- }
- ptra[count - 1] = numa;
- }while(numa != -1);
- printf("输入的整数分别是:");
- for(i = 0;i < count;i++)
- {
- printf("%d ",ptra[i]);
- }
- putchar('\n');
- free(ptra);
- return 0;
- }
复制代码
运行结果:
请输入待录入整数的个数:3
请录入第1个整数:1
请录入第2个整数:3
请录入第3个整数:5
您录入的数字是:1 3 5
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
请输入一个整数(输入-1表示结束):9
请输入一个整数(输入-1表示结束):8
请输入一个整数(输入-1表示结束):7
请输入一个整数(输入-1表示结束):8
请输入一个整数(输入-1表示结束):9
请输入一个整数(输入-1表示结束):0
请输入一个整数(输入-1表示结束):1
请输入一个整数(输入-1表示结束):-1
输入的整数分别是:9 8 7 8 9 0 1 -1
Process returned 0 (0x0) execution time : 8.075 s
Press any key to continue.
在FishC学C的第二十天 |
|