c语言分配内存空间方法,C语言之动态分配内存空间
動態分配內存
為什么需要動態分配內存:
1.存儲的數據 需要延長生命周期
2.一個指針變量需要存儲數據,變量本身只能存地址,不能存數據,需要分配內存空間來存儲數據
#include
#include
int main(){
//char name[100] = {};數組確定大小是為了分配內存空間
//如果使用指針變量接收數據
//必須先為這個指針變量分配一片指向的內存空間
//有內存空間 才能存數據
//使用malloc必須導入頭文件stdlib.h
//使用malloc (memory alloc)申請內存空間
char *name ;
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){
//退出之前必須將之前分配的內存釋放掉
free(name);
exit(EXIT_FAILURE);//表示程序直接退出,如果此次分配不成功直接結束
//會導致之前malloc分配的內存泄漏,所以為了防止泄漏,在程序結束之前應該釋放掉內存
}
//使用完畢必須自己手動釋放內存
free(name);
return 0;
}
小實戰之錄入個人名單
合理使用內存
請輸入姓名:jack
是否繼續(y/n)?:y
請輸入姓名:jackson
是否繼續(y/n)?:n
錄入2個人的信息
jack
jackson
#include
#include
#include
//從終端接收字符串 返回這個字符串的首地址
char *inputName(){
//1.定義一個指針變量 指向字符串的首地址
char *pName = NULL;
//2.接收輸入
int i = 0;
//3.提示操作
printf("請輸入人名:");
while (1) {
//接收一個字符
char c = getchar();
//判斷這個字符是不是\n
if (c == '\n') {
//輸入結束
break;
}
//判斷是不是第一個字符
if(i == 0){
//使用malloc分配內存
pName = (char *)malloc(1*sizeof(char));
//判斷是否分配成功
if(pName == NULL){
exit(EXIT_FAILURE);
}
pName[0] = c;
}else{
//使用realloc在之前的基礎上加一個
pName = (char *)realloc(pName, (i+1)*sizeof(char));
//判斷是否分配成功
if(pName == NULL){
exit(EXIT_FAILURE);
}
pName[i] = c;
}
i++;
}
//將當前的字符串首地址返回
return pName;
}
//是否繼續
bool isContinue(){
printf("是否繼續(y/n)?:");
while (1) {
char c = getchar();
getchar();
if (c == 'y'){
return true;
}else if(c == 'n'){
return false;
}else{
printf("輸入格式不對,請重新輸入:");
}
}
}
//初始化整個數組
char **initNames(int *pNum){
//1.定義指針變量指向每個名字的首地址的內存
char **pHead = NULL;
//2.記錄元素個數
int i = 0;
while (1) {
//判斷是不是第一個
//第一個使用malloc分配內存
if (i == 0) {
pHead = (char **)malloc(1*sizeof(char *));
if (pHead == NULL) {
exit(EXIT_FAILURE);
}
//輸入人名 將地址放到pHead對應位置
pHead[0] = inputName();
}else{
//使用realloc重新再增加一個元素
pHead = (char **)realloc(pHead, (i+1)*sizeof(char *));
if (pHead == NULL) {
exit(EXIT_FAILURE);
}
//輸入人名 將地址放到pHead對應位置
pHead[i] = inputName();
}
i++;
//是否繼續
bool result = isContinue();
if (result == false) {
break;
}
}
*pNum = i;
return pHead;
}
void show(char **pHead, int num){
printf("輸入%d個名字:\n",num);
for (int i = 0; i < num; i++) {
printf("%s\n",pHead[i]);
}
printf("\n");
}
int main(int argc, const char * argv[]) {
char **pHead = NULL;
int count = 0;
pHead = initNames(&count);
show(pHead, count);
return 0;
}
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的c语言分配内存空间方法,C语言之动态分配内存空间的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 冒泡法排序c语言函数模板,使用模板技术的
- 下一篇: 如何给Android添加可视化工具,可视