最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言實現memcpy函數的使用示例

 更新時間:2023年09月15日 14:57:06   作者:Dzhuser  
在C語言中,我們可以自己實現 memcpy 函數來實現內存數據的拷貝操作,本文就來介紹一下C語言實現memcpy函數的使用示例,感興趣的可以了解一下

在 C 語言中,我們可以自己實現 memcpy 函數來實現內存數據的拷貝操作。memcpy 函數用于將指定長度的數據從源地址復制到目標地址。

按字節(jié)拷貝實現memcpy

#include <stdio.h>

void* my_memcpy_byte(void* dst, const void* src, int n)
{
    if (dst == NULL || src == NULL || n <= 0)
        return NULL;

    char* pdst = (char*)dst;
    char* psrc = (char*)src;

	//判斷目標內存區(qū)域和源內存區(qū)域是否有重疊
    if (pdst > psrc && pdst < psrc + n) 
    {
    	//如果有重疊,就從尾部開始遍歷
        pdst = pdst + n - 1;
        psrc = psrc + n - 1;
        while (n--)
            *pdst-- = *psrc--;
    }
    else
    {
        while (n--)
            *pdst++ = *psrc++;
    }
    return dst;
}

int main(void)
{
    char str[] = "HelloWorld";

    char* str1 = &str[0];
    char* str2 = &str[1];

    my_memcpy_byte(str1, str2, 5);

    printf("%s\n", str); //輸出elloWWorld

    return 0;
}

按4字節(jié)拷貝實現memcpy

#include <stdio.h>

void* my_memcpy_byte(void* dst, const void* src, int n)
{
    if (dst == NULL || src == NULL || n <= 0)
        return NULL;

    int* pdst = (int*)dst;
    int* psrc = (int*)src;

    char* pdstTemp = NULL;
    char* psrcTemp = NULL;
    int byte4Count = n / 4; //有多少個4字節(jié),按4字節(jié)拷貝
    int byteCount = n % 4; //剩余字節(jié)數按字節(jié)拷貝

    //判斷目標內存區(qū)域和源內存區(qū)域是否有重疊,如果有從后往前,如果沒有從前往后
    if (pdst > psrc && pdst < (char*)psrc + n)
    {
        pdstTemp = (char*)pdst + n - 1;
        psrcTemp = (char*)psrc + n - 1;

        while (byteCount--)
        {
            *pdstTemp-- = *psrcTemp--;
        }

        pdstTemp++;
        psrcTemp++;

        pdst = (int*)pdstTemp;
        psrc = (int*)psrcTemp;

        pdst--;
        psrc--;

        while (byte4Count--)
        {
            *pdst-- = *psrc--;
        }

    }
    else
    {
        while (byte4Count--)
        {
            *pdst++ = *psrc++;
        }

        pdstTemp = (char*)pdst;
        psrcTemp = (char*)psrc;

        while (byteCount--)
        {
            *pdstTemp++ = *psrcTemp++;
        }
    }

    return dst;
}

int main(void)
{
    char str[] = "HelloWorld";

    char* str1 = &str[0];
    char* str2 = &str[1];

    my_memcpy_byte(str1, str2, 1);

    printf("%s\n", str);

    return 0;
}

Tips

對比字節(jié)拷貝,4字節(jié)拷貝速度是提高不少。
但是需要注意,void *dst, const void *src這兩個參數是需要按4字節(jié)對齊的,如果本身不是4字節(jié)對齊,按4字節(jié)拷貝效率也會變低。

 到此這篇關于C語言實現memcpy函數的使用示例的文章就介紹到這了,更多相關C語言memcpy函數內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C++中關于this指針的入門介紹

    C++中關于this指針的入門介紹

    this?指針在C++類和對象中是個很方便實用的關鍵字,可以簡化對象成員屬性的調用,使代碼表達的含義更加準確;在之前的學習中我們都可以判斷變量所占內存空間大小,那么我們創(chuàng)建的類對象所占的內存空間怎么計算呢?想知道this的妙用和類對象占用的內存空間就來跟我學習吧
    2022-07-07
  • C語言之整數與浮點數運算的類型轉換規(guī)則詳解

    C語言之整數與浮點數運算的類型轉換規(guī)則詳解

    這篇文章主要介紹了C語言之整數與浮點數運算的類型轉換規(guī)則,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • C++集體數據交換實現示例講解

    C++集體數據交換實現示例講解

    這篇文章主要介紹了C++集體數據交換實現示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2022-11-11
  • C語言運算符的優(yōu)先級與結合性詳解及一些錯誤講解

    C語言運算符的優(yōu)先級與結合性詳解及一些錯誤講解

    C語言的運算符和類型轉換是編程的基礎,掌握其規(guī)則不僅能避免語法錯誤,更能寫出高效、可靠的代碼,這篇文章主要介紹了C語言運算符優(yōu)先級與結合性的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2026-03-03
  • C++編程產生指定范圍內的隨機數

    C++編程產生指定范圍內的隨機數

    這篇文章主要為大家詳細介紹了C++編程產生指定范圍內的隨機數,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • QML與C++幾種交互方式

    QML與C++幾種交互方式

    QML作為構建界面的語言是非常簡潔的,但是界面的后臺有些時候是經常要與C++交互的,本文主要介紹了QML與C++幾種交互方式,感興趣的可以了解一下
    2024-04-04
  • 基于C++實現擲雙骰游戲的示例代碼

    基于C++實現擲雙骰游戲的示例代碼

    在最流行的博彩游戲中有一種名為“擲雙骰”(craps)的骰子游戲,這種游戲在世界各地的娛樂場所和大街小巷非常受歡迎。本文將用C++語言實現這一游戲,需要的可以參考一下
    2022-03-03
  • 快速了解C語言靜態(tài)關鍵字static的作用

    快速了解C語言靜態(tài)關鍵字static的作用

    這篇文章主要介紹了C語言中靜態(tài)關鍵字static的作用,對大家學習C語言非常有幫助,有需求的小伙伴可以參考下
    2020-05-05
  • 深入解析C++中的構造函數和析構函數

    深入解析C++中的構造函數和析構函數

    析構函數:在撤銷對象占用的內存之前,進行一些操作的函數。析構函數不能被重載,只能有一個
    2013-09-09
  • 源碼分析C++是如何實現string的

    源碼分析C++是如何實現string的

    我們平時使用C++開發(fā)過程中或多或少都會使用std::string,但您了解string具體是如何實現的嗎,本文小編就帶大家從源碼角度分析一下
    2023-04-04

最新評論

塔城市| 哈尔滨市| 清丰县| 柘城县| 陆良县| 渭南市| 泸州市| 华安县| 巫山县| 汝阳县| 和平县| 贵州省| 湖北省| 柘荣县| 将乐县| 福海县| 潢川县| 莫力| 平泉县| 扎赉特旗| 板桥市| 临桂县| 于都县| 大埔县| 汶上县| 华阴市| 建平县| 凉山| 台北县| 定陶县| 宁安市| 眉山市| 高陵县| 襄汾县| 丹凤县| 辽阳市| 赫章县| 尚义县| 松溪县| 揭西县| 双辽市|