常量字符串的內(nèi)存空間有系統(tǒng)自動分配
在常量區(qū)里面分配 當(dāng)程序結(jié)束才會被釋放
常量區(qū) - 常量 const int a = 1;
靜態(tài)區(qū) static
棧 局部變量 int a = 10;離開作用域就自動收回
堆 自己申請的內(nèi)存 malloc calloc realloc 必須自己釋放

HQW}V~I$H5LSCAMEELO@IAD.jpg

SS(BRUN$K]{IN_0QD$07}J8.jpg
#include <stdio.h>
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<stdio.h>
#include<stdlib.h>
int main()
{
//char name[100]={};
char *name;
//若果使用指針變量接收數(shù)據(jù)
//必須先為這個指針變量分配一片指向的內(nèi)存空間
//有內(nèi)存空間 才能存數(shù)據(jù)
//導(dǎo)入頭文件stdlib.h
//使用malloc(memory alloc)申請內(nèi)存空間
name=(char*)malloc(10*sizeof(char));
if(name==NULL){
//申請內(nèi)存失敗
exit(EXIT_FAILURE);
}
scanf("%s",name);
printf("%s\n",name);
//使用realloc動態(tài)改變已經(jīng)分配內(nèi)存的大小
//增加或者減少
name=(char*)realloc(name,20*sizeof(char)) ;
if(name==NULL){
//申請內(nèi)存失敗
exit(EXIT_FAILURE);
}
//使用完畢必須自己手動釋放內(nèi)存
free(name);
return 0;
}
做一個demo
請輸入姓名:jack
是否繼續(xù)(y/n)?:y
請輸入姓名:jackson
是否繼續(xù)(y/n)?:n
錄入兩個人的信息:jack Jackson

XRFXC1NMLR73HDL~T4SU51T.png