当前位置: 代码迷 >> 综合 >> day02 c语言 动态分配
  详细解决方案

day02 c语言 动态分配

热度:1   发布时间:2024-01-17 14:41:02.0

c语言

动态分配

malloc

#include <stdio.h>
#include <stdlib.h>int main()
{
    int *ptr = NULL;ptr =(int*) malloc(sizeof(int));if(ptr == NULL){
    printf("分配内存失败!\n");exit(1);}printf("请输入一个整数:\n");scanf("%d",ptr);printf("你输入的整数是;%d\n",*ptr); free(ptr);printf("你输入的整数是;%d\n",*ptr);//随机数return 0 ;//ptr不能指向其他变量,否则就会丢失内存块地址}
#include <stdio.h>
#include <stdlib.h>int main()
{
    int *ptr = NULL;int num;int i;printf("请输入整数个数:\n");scanf("%d",&num);ptr = (int *)malloc(num*sizeof(int));for(i = 0; i < num; i++){
    printf("请输入第%d个整数",i+1);scanf("%d",&ptr[i]);}printf("结果是:\n");for(i = 0; i < num; i++){
    printf("%d ",ptr[i]);}putchar('\n');free(ptr);return 0;}

memset(初始化)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 10int main()
{
    int *ptr = NULL;int i;ptr = (int *)malloc(N*sizeof(int));if(ptr == NULL){
    exit(1);}memset(ptr, 0, N* sizeof(int));for( i = 0 ; i < N ; i++){
    printf("%d ",ptr[i]);}putchar('\n');free(ptr);return 0;}

calloc

//calloc分配内存空间并初始化
int *ptr = (int *)calloc(8,sizeof(int));
//malloc分配内存空间并用memset初始化
int *ptr = (int *)malloc(8 * sizeof(int));
memset(ptr, 0, 8 * sizeof(int));

重新申请

#include <stdio.h>
#include <stdlib.h>
#include <string.h>int main()
{
    int *ptr1 = NULL;int *ptr2 = NULL;//第一次申请的内存空间ptr1 = (int *)malloc(10 * sizeof(int));//进行若干操作后发现ptr1空间不够//进行第二次申请空间ptr2 = (int *)malloc(20 * sizeof(int));//拷贝数据memcpy(ptr2, ptr1, 10 * sizeof(int));free(ptr1);//对ptr2进行若干操作 free(ptr2);return 0;}

realloc

#include <stdio.h>
#include <stdlib.h>
#include <string.h>int main()
{
    int i,num;int count = 0;int *ptr = NULL;//注意必须初始化为NULLdo{
    printf("请输入一个整数");scanf("%d",&num);count++;ptr = (int *)realloc(ptr,count * sizeof(int ));if(ptr == NULL){
    exit(1);}ptr[count-1] = num;}while(num != -1);for( i = 0; i < count; i++){
    printf("%d ",ptr[i]);}putchar('\n');free(ptr);return 0;
}