二維指針——改變動態(tài)申請的空間大小-創(chuàng)新互聯(lián)

假如,我現(xiàn)在動態(tài)申請了一個10個字節(jié)大小的空間。

創(chuàng)新互聯(lián)服務項目包括北關網(wǎng)站建設、北關網(wǎng)站制作、北關網(wǎng)頁制作以及北關網(wǎng)絡營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關系等,向廣大中小型企業(yè)、政府機構等提供互聯(lián)網(wǎng)行業(yè)的解決方案,北關網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務的客戶以成都為中心已經(jīng)輻射到北關省份的部分城市,未來相信會繼續(xù)擴大服務區(qū)域并繼續(xù)獲得客戶的支持與信任!
char* p = ( char* ) malloc ( sizeof ( char ) * 10 );

我申請了10個字節(jié)大小的空間,然而,我用不到這么多空間,為了節(jié)省空間,所以我需要釋放多余的空間,也就是說,我需要改變動態(tài)申請的空間大小。假設我現(xiàn)在只需要用到其中的5個字節(jié)大小的空間,那么意味著我需要釋放其中5個字節(jié)。也就是說,將本來的10個字節(jié)大小的空間,改為5個字節(jié)大小的空間。
那么,現(xiàn)在,我們來實這個改變動態(tài)申請空間大小的函數(shù)。首先,因為,我們需要改變空間大小,所以,必然的,我們要指定我們我們最初申請的空間大小,以及我們想要改變的,新的空間大小。由于,這是動態(tài)申請的空間,所以,我們在實現(xiàn)函數(shù)時,需要一個指向這個動態(tài)申請空間的指針的指針。那么也就是說,這個函數(shù)聲明是這樣的:

void reset ( char** p, int size, int new_size );

現(xiàn)在,我們已經(jīng)有了函數(shù)的聲明,那么我們現(xiàn)在就來實現(xiàn)它。由于我們是想要改變,這個原有的空間的大小,所以,很明顯,我們需要一個新的指針去動態(tài)申請一個新的空間。代碼如下:

char* pt = NULL;
pt = ( char* ) malloc ( sizeof ( char ) * new_size );

從理論上講,我們函數(shù)中的二維指針p已經(jīng)指向了主函數(shù)中的一維指針,也就是說,在reset函數(shù)中我們可以直接

*p = pt;

只可惜,這樣做是錯的。因為很明顯,我們還沒有將原本空間中的值放入新申請的空間中,雖然空間確實該變了,但是原本空間中的值沒有放入新的空間中。所以,我們現(xiàn)在要在函數(shù)中,完成數(shù)據(jù)的復制操作。那么現(xiàn)在,我們需要一個新的指針指向這個新開辟的空間,作用是讓它循環(huán)遍歷將值一個一個的放入進去。

char* tmp = pt;

除此之外,我們還需知道有幾個需要復制的數(shù)據(jù)。所以,還需要一個變量用以記錄數(shù)據(jù)個數(shù)。
完整代碼如下:

void reset ( char** p, int size, int new_size ){

    char* pt  =  NULL;
    char* tmp = NULL;
    int len = 0;
    char* pp = *p;
    int i = 0;

    if ( p != NULL && new_size > 0 ){

        pt = ( char* ) malloc ( sizeof ( char ) * new_size );
        tmp = pt;

        len = ( size < new_size ) ? size: new_size;

        for ( i = 0; i < len; ++i )
            *tmp++ = *pp++;

            free ( *p );

            *p = pt;

    }

}

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

分享題目:二維指針——改變動態(tài)申請的空間大小-創(chuàng)新互聯(lián)
本文來源:http://muchs.cn/article2/ceesic.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版品牌網(wǎng)站制作、品牌網(wǎng)站建設、商城網(wǎng)站、網(wǎng)站排名微信公眾號

廣告

聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運營