日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言分配内存空间方法,C语言之动态分配内存空间

發布時間:2023/12/15 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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语言之动态分配内存空间的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。