C 动态分配内存
最佳答案 问答题库1068位专家为你答疑解惑
C 动态分配内存
在本教程中,您将学习使用标准库函数:malloc,calloc,free和realloc在C语言程序中动态分配内存。
如您所知,数组是固定数量的值的集合。声明数组的大小后,您将无法更改它。
有时,您声明的数组的大小可能不足。要解决此问题,可以在运行时手动分配内存。这在C语言编程中称为动态内存分配。
可以使用标准库函数malloc,calloc,realloc和free,进行动态分配内存。这些函数在<stdlib.h>头文件中定义。
C malloc
名称 malloc表示内存分配。
malloc()函数保留一个指定字节数的内存块。 并且,它返回一个void指针,可以将其转换为任何形式的指针。
malloc()的语法
ptr = (castType*) malloc(size);
示例
ptr = (float*) malloc(100 * sizeof(float));
上面的语句分配了400字节的内存。因为浮点数的大小是4字节。并且,指针ptr保存分配内存中的第一个字节的地址。
如果无法分配内存,则表达式将产生NULL指针。
C calloc()
名称calloc表示连续分配。
malloc()函数分配内存,并保留未初始化的内存。 而calloc()函数分配内存并将所有位初始化为零。
calloc()的语法
ptr = (castType*)calloc(n, size);
示例:
ptr = (float*) calloc(25, sizeof(float));
上面的语句在内存中为25个float类型的元素分配连续空间。
C free()
使用calloc或malloc动态分配的内存不会自己释放。必须显式地使用free来释放空间。
free的语法
free(ptr);
该语句释放由ptr指向的内存中分配的空间。
示例1:malloc和free
示例
//程序来计算用户输入的n个数字的总和#include <stdio.h>
#include <stdlib.h>int main()
{int n, i, *ptr, sum = 0;printf("输入元素数量: ");scanf("%d", &n);ptr = (int*) malloc(n * sizeof(int));// 如果无法分配内存if(ptr == NULL) {printf("错误! 内存未分配。");exit(0);}printf("输入元素: ");for(i = 0; i < n; ++i){scanf("%d", ptr + i);sum += *(ptr + i);}printf("Sum = %d", sum);//释放内存free(ptr);return 0;
}
在这里,我们为n个int动态分配了内存。
示例2:calloc和free
示例
//程序来计算用户输入的n个数字的总和#include <stdio.h>
#include <stdlib.h>int main()
{int n, i, *ptr, sum = 0;printf("输入元素数量: ");scanf("%d", &n);ptr = (int*) calloc(n, sizeof(int));if(ptr == NULL){printf("错误! 内存未分配。");exit(0);}printf("输入元素: ");for(i = 0; i < n; ++i){scanf("%d", ptr + i);sum += *(ptr + i);}printf("Sum = %d", sum);free(ptr);return 0;
}
C realloc
如果动态分配的内存不足或超过所需,可以使用realloc()函数更改以前分配的内存的大小。
realloc的语法
ptr = realloc(ptr, x);
在这里,ptr被重新分配为新的大小x。
示例3:realloc
示例
#include <stdio.h>
#include <stdlib.h>int main()
{int *ptr, i, n1, n2;printf("输入大小: ");scanf("%d", &n1);ptr = (int*)malloc(n1 * sizeof(int));printf("先前分配的内存地址: ");for (i = 0; i < n1; ++i)printf("%u\n", ptr + i);printf("\n输入新的大小: ");scanf("%d", &n2);//重新分配内存ptr = realloc(ptr, n2 * sizeof(int));printf("新分配的内存地址: ");for (i = 0; i < n2; ++i)printf("%u\n", ptr + i);free(ptr);return 0;
}
运行该程序时,输出为:
输入大小: 3
先前分配的内存地址: 7452312
7452316
7452320输入新的大小: 5
新分配的内存地址: 7452312
7452316
7452320
7452324
7452328
99%的人还看了
相似问题
猜你感兴趣
版权申明
本文"C 动态分配内存":http://eshow365.cn/6-40321-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!
- 上一篇: xshell部署前端代码
- 下一篇: 释放固态继电器的力量:主要优势和应用