动态分配内存

常量字符串的内存空间有系统自动分配
在常量区里面分配 当程序结束才会被释放
常量区 - 常量 const int a = 1;
静态区 static
栈 局部变量 int a = 10;离开作用域就自动收回
堆 自己申请的内存 malloc calloc realloc 必须自己释放


SS(BRUN$K]{IN_0QD$07}J8.jpg
#include 
char* test(){
    char *name = "jack";
    return name;
} 

char *test1(){
    char name[10] = {'j','a','c','k'};
    return name;
} 
int main(){
    char *p ;
    p = test1();
    
    printf("-%s\n", p);
    return 0;
}

malloc realloc

#include
#include
int main()
{
   //char name[100]={};
   char *name;
   //若果使用指针变量接收数据
   //必须先为这个指针变量分配一片指向的内存空间
   //有内存空间 才能存数据
   
   //导入头文件stdlib.h 
   //使用malloc(memory alloc)申请内存空间
   name=(char*)malloc(10*sizeof(char));  
   if(name==NULL){
    //申请内存失败
       exit(EXIT_FAILURE); 
   }
   scanf("%s",name);
   printf("%s\n",name);
   //使用realloc动态改变已经分配内存的大小 
   //增加或者减少 
   name=(char*)realloc(name,20*sizeof(char)) ;
   if(name==NULL){
    //申请内存失败
       exit(EXIT_FAILURE); 
   }
   //使用完毕必须自己手动释放内存 
   free(name);
   return 0;
}

做一个demo

请输入姓名:jack
是否继续(y/n)?:y
请输入姓名:jackson
是否继续(y/n)?:n
录入两个人的信息:jack Jackson

![F}L4DQX5U6LR916`{{G0H8.png

XRFXC1NMLR73HDL~T4SU51T.png

你可能感兴趣的:(动态分配内存)