一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

C語言高級(jí)用法 - 動(dòng)態(tài)數(shù)組

 123xyz123 2023-07-18 發(fā)布于湖南

C語言動(dòng)態(tài)數(shù)組是指在聲明時(shí)沒有確定數(shù)組大小的數(shù)組,即忽略方括號(hào)中的下標(biāo);當(dāng)要用它時(shí),可隨時(shí)用內(nèi)存管理函數(shù)重新指定數(shù)組的大小。動(dòng)態(tài)數(shù)組的內(nèi)存空間是從堆(heap)上分配的,是在執(zhí)行代碼過程中分配的,當(dāng)程序執(zhí)行到這些語句時(shí),才為其分配。注意,程序員自己負(fù)責(zé)釋放內(nèi)存。

C語言提供了一些內(nèi)存管理函數(shù)來幫助我們來按需要?jiǎng)討B(tài)地分配和回收內(nèi)存空間,這些函數(shù)包括:

- `malloc(size)`:在堆上分配一塊長(zhǎng)度為size字節(jié)的連續(xù)區(qū)域,并返回其首地址。

- `calloc(n, size)`:在堆上分配n塊長(zhǎng)度為size字節(jié)的連續(xù)區(qū)域,并返回其首地址。與malloc不同的是,calloc會(huì)將分配的空間初始化為0。

- `realloc(p, size)`:重新分配堆上的指針p所指的空間,使其長(zhǎng)度為size個(gè)字節(jié),并返回新的首地址。同時(shí)會(huì)復(fù)制原有內(nèi)容到新分配的空間。注意,size可大可?。ㄈ绻碌拇笮〈笥谠瓋?nèi)存大小,則新分配部分不會(huì)被初始化;如果新的大小小于原內(nèi)存大小,可能會(huì)導(dǎo)致數(shù)據(jù)丟失)。

- `free(p)`:釋放指針p所指的堆上的空間。

這些函數(shù)都需要包含`<stdlib.h>`頭文件。使用這些函數(shù)時(shí),需要注意以下幾點(diǎn):

- 函數(shù)的返回值是`void*`類型,表示一個(gè)無類型或類型不確定的指針。我們可以用強(qiáng)制類型轉(zhuǎn)換的方法將其轉(zhuǎn)換為所需的類型,例如`int* p = (int*)malloc(sizeof(int) * n);`。

- 函數(shù)的返回值可能是NULL,表示內(nèi)存分配失敗。我們需要在使用指針之前檢查是否為NULL,并做相應(yīng)的異常處理。

- 分配的堆空間是沒有名字的,只能通過返回的指針找到它。我們不能對(duì)非動(dòng)態(tài)分配的存儲(chǔ)塊使用free,也不能對(duì)同一塊內(nèi)存區(qū)同時(shí)用free釋放兩次。

- 調(diào)用free時(shí), 傳入指針指向的內(nèi)存被釋放, 但調(diào)用函數(shù)的指針值可能保持不變, 因?yàn)閜是作為形參而傳遞給了函數(shù)。嚴(yán)格地說, 被釋放的指針值是無效的, 因?yàn)樗巡辉僦赶蛩暾?qǐng) 的內(nèi)存區(qū)。這時(shí)對(duì)它的任何使用便可能會(huì)帶來問題。

使用內(nèi)存管理函數(shù)構(gòu)建動(dòng)態(tài)數(shù)組時(shí),需要遵循以下原則:

- 申請(qǐng)空間時(shí),從外層往里層,逐層申請(qǐng)。

- 釋放空間時(shí),從里層往外層,逐層釋放。

以二維整型數(shù)組`int arr[m][n]`為例,我們可以用以下代碼來構(gòu)建和釋放動(dòng)態(tài)數(shù)組:

// 構(gòu)建二維動(dòng)態(tài)數(shù)組int m, n; // 數(shù)組大小int** arr; // 二維指針scanf('%d%d', &m, &n); // 輸入數(shù)組大小arr = (int**)malloc(sizeof(int*) * m); // 申請(qǐng)m個(gè)一維指針if (arr == NULL) { // 檢查是否申請(qǐng)成功 printf('內(nèi)存申請(qǐng)失??!\n'); exit(1);}for (int i = 0; i < m; i++) { arr[i] = (int*)malloc(sizeof(int) * n); // 申請(qǐng)n個(gè)整型數(shù)據(jù) if (arr[i] == NULL) { // 檢查是否申請(qǐng)成功 printf('內(nèi)存申請(qǐng)失??!\n'); exit(1); }}// 使用動(dòng)態(tài)數(shù)組for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { scanf('%d', &arr[i][j]); // 輸入數(shù)組元素 }}for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { printf('%d ', arr[i][j]); // 輸出數(shù)組元素 }printf('\n');}// 釋放動(dòng)態(tài)數(shù)組for (int i = 0; i < m; i++) { free(arr[i]); // 釋放每一行的空間}free(arr); // 釋放指針數(shù)組的空間arr = NULL; // 將指針置為NULL,避免野指針

系列文章持續(xù)更新,如果覺得有幫助請(qǐng)點(diǎn)贊+關(guān)注!

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    爽到高潮嗷嗷叫之在现观看| 亚洲午夜精品视频在线| 加勒比日本欧美在线观看| 国产精品免费福利在线| 国产男女激情在线视频| 国产精品人妻熟女毛片av久| 国产精品视频久久一区| 激情内射亚洲一区二区三区| 精品推荐国产麻豆剧传媒| 亚洲综合日韩精品欧美综合区| 男人大臿蕉香蕉大视频| 大香蕉久草网一区二区三区| 亚洲中文字幕日韩在线| 日韩欧美三级视频在线| 中文字幕一区二区三区大片| 国产精品乱子伦一区二区三区| 日韩精品一区二区三区射精| 欧美日韩中黄片免费看| 好骚国产99在线中文| 激情五月天深爱丁香婷婷| 老鸭窝老鸭窝一区二区| 少妇特黄av一区二区三区| 又大又长又粗又猛国产精品| 又大又长又粗又猛国产精品| 中文字幕久久精品亚洲乱码| 成人区人妻精品一区二区三区| 日韩国产中文在线视频| 欧美精品久久99九九| 欧美午夜视频免费观看| 国产精品视频一级香蕉| 国产欧美日韩不卡在线视频| 伊人国产精选免费观看在线视频| 国产人妻熟女高跟丝袜| 精品国产丝袜一区二区| 欧美精品亚洲精品一区| 欧美日韩国产二三四区| 91人妻久久精品一区二区三区 | 亚洲中文字幕剧情在线播放| 久久国产精品亚州精品毛片| 九九热这里只有精品视频| 国产成人精品午夜福利|