首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

通用結構體複製函數:位元組級記憶體拷貝實作

     編輯:關於C++

在 C/C++ 中,將一個結構體的所有欄位值複製到另一個相同類型的結構體,若逐欄位賦值,不僅程式碼冗長,結構定義變更時更需同步修改,維護極不便。本文提供一個通用的結構體複製函數,利用位元組級記憶體拷貝實現高效、通用的複製。

設計原理

結構體在記憶體中各欄位連續儲存,且可分解為單個位元組。複製時只需令兩結構體對應位元組數值相等即可。函數以 void* 接收任意指標,配合 sizeof 取得類型大小,逐位元組複製:

void struct_copy(
    void *p_struct1,       // 目標結構體指標
    void *p_struct2,       // 來源結構體指標
    unsigned int struct_size // 結構體大小,可用 sizeof(STRUCT_TYPE)
) {
    int count = 0;
    char *p_char1 = (char*)p_struct1;
    char *p_char2 = (char*)p_struct2;

    while (count != struct_size) {
        *p_char1 = *p_char2;
        p_char1++;
        p_char2++;
        count++;
    }
}

使用範例

對於同類型結構體 struct1、struct2,呼叫方式:

struct_copy(&struct1, &struct2, sizeof(STRUCT_TYPE));

適用範圍與優點

  • 適用任意結構體類型,包含巢狀結構、聯合體(union)等複雜資料類型。
  • 甚至適用於基本類型(整數、浮點數)變數間的複製。
  • 程式碼簡潔、通用、高效,在 PC 與 Alpha 小型機上實測表現良好。

延伸應用

此設計思想可延伸至進程間、電腦間通訊:發送端將資料拆解為位元組流傳輸,接收端重組為對應資料類型,比位元級傳輸更簡單高效。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved