指针与MALLOC,CALLOC,REALLOC函数

Umi 发布于 2025-10-03 46 次阅读


#include <stdio.h>
#include <stdlib.h>

int main ()
{    
    int numbers=0;    
    
    printf("Enter the number of data: ");
    if (scanf("%d", &numbers) != 1 || numbers <= 0) {
        printf("Invalid input or number of data must be greater than 0.\n");
        return 1;
    }

    int *pData=calloc(numbers,sizeof(int)); //ALSO malloc(numbers*sizeof(int))
    if(pData==NULL){
        printf("MEMORY ALLOCATE FAILED\n PROGRAM EXITED.");
        return 1;
    }    

    for(int i=0;i<numbers;i++){
        printf("Enter Data No.%d: ",i+1);
        scanf("%d",&pData[i]); 
        //等价于 scanf("%d",*(pData + i)); 所以不要显性的dereference符号*
    }

    printf("Your Inital Data is:\n");
    for(int i=0;i<numbers;i++){
        printf("%d ",pData[i]); 
    }


    //Add or delete data
    int newnumber=0;
    enum CHOICE {ADD=1,DELETE,EXIT} ;
    int choice = 0;
    printf("\n\nEnter your choice\n1.Add data\n2.Delete data\n3.Exit\n");
    printf("Choose: ");
    if (scanf("%d", &choice) != 1) {
        printf("Invalid choice input\n");
        free(pData);
        return 1;
    }

    if(choice == ADD){
        printf("Add # data: ");
        scanf("%d",&newnumber);
        int *temp=realloc(pData,(numbers+newnumber)*sizeof(int));
        pData = temp;
        for(int i=0;i<newnumber;i++){
                printf("Enter Data No.%d: ",i+1+numbers);
                scanf("%d",&pData[i+numbers]); 
                //equivalent: scanf("%d",*(pData + i));        
        }
        numbers += newnumber;
    }

    else if(choice == DELETE){
        printf("Delete last # data: ");
        scanf("%d",&newnumber);
        int *temp=realloc(pData,(numbers-newnumber)*sizeof(int));
        pData = temp;
        numbers -= newnumber;
    } 

    else if(choice == EXIT){
        printf("PROGRAM EXITED\n");
        return 0;
    }

    //print changed data
    printf("Changed data: ");
    for(int i=0;i<numbers;i++){
        printf("%d ",pData[i]); //dereference is invisible
    }

    //file print
    FILE *pFile=fopen("data.txt","w");
    for(int i=0;i<numbers;i++){
        fprintf(pFile,"%d ",pData[i]);
    }

    fclose(pFile);
    free(pData);
    pData = NULL;
    return 0;
}
此作者没有提供个人介绍。
最后更新于 2025-10-03