中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

c語言實現動態內存分配的方法是什么

發布時間:2020-04-26 14:03:57 來源:億速云 閱讀:275 作者:小新 欄目:編程語言

這篇文章主要為大家詳細介紹了c語言實現動態內存分配的方法是什么,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下。

c語言怎么實現動態內存分配

我們經常會預先給程序開辟好內存空間,然后進行操作。

int arr[5] ;

對這個數組我們在定義的時候必須給提前開辟好空間,并且在程序執行的過程中,這個開辟的內存空間是一直存在的,除非等到這個函數執行完畢,才會將空間釋放。有個問題就是這個數組在程序中無法被修改。

這些問題給我們造成了一些使用上的不方便,所以,C中提供了malloc()函數。

關于malloc()函數,這個函數它接受一個參數:就是所需的內存的字節數。然后malloc()找到可用內存中那一個大小適合的塊。在這個過程中,malloc()可以來返回那塊內存第一個字節的地址。所以,也就意味了我們可以使用指針來操作。malloc()可以用來返回數組指針、結構指針等等,所以我們需要把返回值的類型指派為適當的類型。當malloc()找不到所需的空間時,它將返回空指針。

例:

double *p;
p=(double*)malloc(30*sizeof(double));

在這個程序中,首先開辟了30個double類型的空間,然后把p指向這個空間的位置。在這里的指針是指向第一個double值。并不是我們全部開辟的30個double的空間。這就和數組一樣,指向數組的指針式指向數組首元素的地址,并不是整個數組的元素。所以,在這里我們的操作也和數組是一樣的,

p[0]就是第一個元素,p[1]就是第二個元素。

至此,我們就可以掌握到一種聲明動態數組的方法。

int arr[n];
p=(int *)malloc(n*sizeof(int));
//我們在這里使用的時候要元素個數乘類型字節長度,這樣就達到了動態開辟內存空間。

當我們使用malloc()開辟完內存空間以后,我們所要考慮的就是釋放內存空間,在這里,C給我們提供了free()函數。free()的參數就是malloc()函數所返回的地址,釋放先前malloc()函數所開辟的空間。

例:

對于上面我們所開辟的空間進行釋放,那么我們就可以這樣

free(p);

程序還調用了exit()函數,這個函數是在內存分配失敗時結束程序。

程序例子:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<malloc.h>//malloc()函數被包含在malloc.h里面
#include<stdlib.h>
int main(void)
{
    char*a = NULL;//聲明一個指向a的char*類型的指針
    a = (char*)malloc(100 * sizeof(char));//使用malloc分配內存的首地址,然后賦值給a
    if (!a)//如果malloc失敗,可以得到一些log
    {
        perror("malloc");
        return-1;
    }
    sprintf(a, "%s", "HelloWorld\n");//"HelloWorld\n"寫入a指向的地址
    printf("%s\n", a);//輸出用戶輸入的數據
    free(a);//釋放掉使用的內存地址
    system("pause");
    return 0;//例2有無內存泄露?
}

這個程序主要用來檢測malloc返回值條件有誤。

在這里我們需要注意,在C中,類型指派(char *)是可選的,但是在C++中這個是必須有的,所以使用類型指派將使把C程序移植到C++更容易。

使用動態數組,主要是為了獲得程序的靈活性。我們可以需要多少個元素就讓數組開辟多少個。不需要浪費空間。

關于c語言實現動態內存分配的方法是什么就分享到這里了,希望以上內容可以對大家有一定的參考價值,可以學以致用。如果喜歡本篇文章,不妨把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

共和县| 汉沽区| 罗田县| 东乡族自治县| 横山县| 乃东县| 新安县| 石狮市| 玛纳斯县| 卫辉市| 石景山区| 新干县| 云龙县| 海兴县| 达州市| 盐池县| 娄烦县| 万全县| 余江县| 德江县| 喀喇| 凤冈县| 丰顺县| 永登县| 宣城市| 海伦市| 乌什县| 敦煌市| 龙南县| 河津市| 赫章县| 周口市| 深水埗区| 太白县| 金华市| 鲜城| 岳阳市| 文水县| 双牌县| 庆阳市| 光泽县|