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

char* p = ( char* ) malloc ( sizeof ( char ) * 10 );我申請(qǐng)了10個(gè)字節(jié)大小的空間,然而,我用不到這么多空間,為了節(jié)省空間,所以我需要釋放多余的空間,也就是說(shuō),我需要改變動(dòng)態(tài)申請(qǐng)的空間大小。假設(shè)我現(xiàn)在只需要用到其中的5個(gè)字節(jié)大小的空間,那么意味著我需要釋放其中5個(gè)字節(jié)。也就是說(shuō),將本來(lái)的10個(gè)字節(jié)大小的空間,改為5個(gè)字節(jié)大小的空間。
那么,現(xiàn)在,我們來(lái)實(shí)這個(gè)改變動(dòng)態(tài)申請(qǐng)空間大小的函數(shù)。首先,因?yàn)椋覀冃枰淖兛臻g大小,所以,必然的,我們要指定我們我們最初申請(qǐng)的空間大小,以及我們想要改變的,新的空間大小。由于,這是動(dòng)態(tài)申請(qǐng)的空間,所以,我們?cè)趯?shí)現(xiàn)函數(shù)時(shí),需要一個(gè)指向這個(gè)動(dòng)態(tài)申請(qǐng)空間的指針的指針。那么也就是說(shuō),這個(gè)函數(shù)聲明是這樣的:
void reset ( char** p, int size, int new_size );現(xiàn)在,我們已經(jīng)有了函數(shù)的聲明,那么我們現(xiàn)在就來(lái)實(shí)現(xiàn)它。由于我們是想要改變,這個(gè)原有的空間的大小,所以,很明顯,我們需要一個(gè)新的指針去動(dòng)態(tài)申請(qǐng)一個(gè)新的空間。代碼如下:
char* pt = NULL;
pt = ( char* ) malloc ( sizeof ( char ) * new_size );從理論上講,我們函數(shù)中的二維指針p已經(jīng)指向了主函數(shù)中的一維指針,也就是說(shuō),在reset函數(shù)中我們可以直接
*p = pt;只可惜,這樣做是錯(cuò)的。因?yàn)楹苊黠@,我們還沒(méi)有將原本空間中的值放入新申請(qǐng)的空間中,雖然空間確實(shí)該變了,但是原本空間中的值沒(méi)有放入新的空間中。所以,我們現(xiàn)在要在函數(shù)中,完成數(shù)據(jù)的復(fù)制操作。那么現(xiàn)在,我們需要一個(gè)新的指針指向這個(gè)新開(kāi)辟的空間,作用是讓它循環(huán)遍歷將值一個(gè)一個(gè)的放入進(jìn)去。
char* tmp = pt;除此之外,我們還需知道有幾個(gè)需要復(fù)制的數(shù)據(jù)。所以,還需要一個(gè)變量用以記錄數(shù)據(jù)個(gè)數(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;
}
}另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
分享題目:二維指針——改變動(dòng)態(tài)申請(qǐng)的空間大小-創(chuàng)新互聯(lián)
本文來(lái)源:http://www.yijiale78.com/article2/ceesic.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、品牌網(wǎng)站制作、品牌網(wǎng)站建設(shè)、商城網(wǎng)站、網(wǎng)站排名、微信公眾號(hào)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容