亚洲一区亚洲二区亚洲三区,国产成人高清在线,久久久精品成人免费看,999久久久免费精品国产牛牛,青草视频在线观看完整版,狠狠夜色午夜久久综合热91,日韩精品视频在线免费观看

自寫內(nèi)存操作函數(shù) -電腦資料

電腦資料 時(shí)間:2019-01-01 我要投稿
【www.ishadingyu.com - 電腦資料】

    【內(nèi)存操作函數(shù)】

    字符串操作函數(shù)中有一個(gè)strcpy的函數(shù),它可以拷貝字符類型,那么有沒有不關(guān)心類型的函數(shù)呢?這個(gè),當(dāng)然是有滴,大師們?cè)缇蛯⑺麄儗懙綆炖锩媪耍?h3>自寫內(nèi)存操作函數(shù)。

    1.memcpy() 用來復(fù)制內(nèi)存,其原型為:

    void * memcpy ( void * dest, const void * src, size_t num );

    memcpy() 會(huì)復(fù)制 src 所指的內(nèi)存內(nèi)容的前 num 個(gè)字節(jié)到 dest 所指的內(nèi)存地址上。

    memcpy() 并不關(guān)心被復(fù)制的數(shù)據(jù)類型,也就是說它可以操作任意類型,只是逐字節(jié)地進(jìn)行復(fù)制,這給函數(shù)的使用帶來了很大的靈活性,可以面向任何數(shù)據(jù)類型進(jìn)行復(fù)制。

    需要注意的是:

    >>1.dest 指針要分配足夠的空間,也即大于等于 num 字節(jié)的空間。如果沒有分配空間,會(huì)出現(xiàn)斷錯(cuò)誤。

    >>2.dest 和 src 所指的內(nèi)存空間不能重疊(如果發(fā)生了重疊,使用 memmove()會(huì)更加安全)。

    與 strcpy() 不同的是,memcpy() 會(huì)完整的復(fù)制 num 個(gè)字節(jié),不會(huì)因?yàn)橛龅?ldquo;\0”而結(jié)束。

    【返回值】返回指向 dest 的指針。注意返回的指針類型是 void,使用時(shí)一般要進(jìn)行強(qiáng)制類型轉(zhuǎn)換。

    【函數(shù)實(shí)現(xiàn)】

   

#include <stdio.h>#include <string.h>#define MAX 20void* my_memcpy(void *dest,const void *src,size_t count){     int *buf1=(int *)dest;     int *buf2=(int *)src;     int *pret=(int *)dest;     while (count--)     {          *buf1=*buf2;          buf1++;          buf2++;     }     return pret;}int main(){     int arr[MAX]={0};     int brr[5]={1,2,3,4,5};     int size=sizeof(brr)/sizeof(brr[0]);     int i=0;     my_memcpy(arr,brr,size);     for (i=0;i<MAX;i++)     {         printf("%d ",arr[i]);     }     printf("\n");     return 0;}

    結(jié)果:

   

    這個(gè)就將原數(shù)組中的0一個(gè)不漏的打印出來了,好神奇_^_^_

    有了這個(gè)函數(shù),就解決了一部分拷貝的問題,為什么說一部分呢,接下來,聽我慢慢道來,

電腦資料

自寫內(nèi)存操作函數(shù)》(http://www.ishadingyu.com)。這個(gè)時(shí)候,我有一個(gè)問題,如果我給定一個(gè)數(shù)組arr[10]={1,2,3,4,5,6,7,8,9,10};我想把它的{5,6,7,8}拷貝到{7,8,9,10}上去最后打印出數(shù)組arr結(jié)果應(yīng)該是{1,2,3,4,5,6,5,6,7,8};接下來看代碼實(shí)現(xiàn):

   

#include <stdio.h>void* my_memcpy(void *dest,const void *src,size_t count){     int *buf1=(int *)dest;     int *buf2=(int *)src;     int *p=(int *)dest;     while (count--)     {          *buf1=*buf2;          buf1++;          buf2++;     }     return p;}int main(){     int arr[10]={1,2,3,4,5,6,7,8,9,10};     int i=0;     my_memcpy(arr+6,arr+4,16);     for (i=0;i<10;i++)     {          printf("%d ",arr[i]);     }     printf("\n");     return 0;}

    結(jié)果:

   

    這個(gè)結(jié)果怎么和預(yù)先預(yù)測(cè)的結(jié)果不一樣呢_~~_這就是出現(xiàn)上面注意的第二點(diǎn)dest 和 src 所指的內(nèi)存空間不能重疊,如果出現(xiàn)重疊,就會(huì)出現(xiàn)想不到的問題。

最新文章