程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 通用結構復制函數

通用結構復制函數

編輯:關於C++

在C/C++語言中,將一個組合數據類型如結構各個字段的值復制到另一個相同類型的結構中,可以將其對應字段賦值。這種方法對於各種復雜的結構如多字段結構、嵌套結構,就要寫很多行賦值語句,而且如果原來的結構定義更改,程序代碼就要隨著更改,使用很不方便。本文給出了一個通用的結構復制函數。

假定結構的類型為STRUCT_TYPE。為了提高效率,用指針引入兩個結構到函數中;為了通用,這兩個指針用任意指針。函數設計的出發點是,每個結構在內存中各字段連續存放,而且,每個字段可以分解中一個一個的字節。這樣,復制結構時,可以讓兩個結構的對應的每個字節表示的值相等。於是,函數設計如下:

void struct_copy(
  void *p_struct1,  /*結構指針1*/
  void *p_struct2,  /*結構指針2*/
  unsigned int struct_size  /*結構類型長度,可以用sizeof(STRUCT_TYPE)代入*/
      )
  {
  int count=0;
  char *p_char1,*p_char2;
  
  p_char1=(char *)p_struct1;
  p_char2=(char *)p_struct2;
  
  while(count!=struct_size)
  {
    *p_char1=*p_char2;
    p_char1++;
    p_char2++;
    count++;
  }
  }

這個函數在PC機和康柏ALPHA小型機上使用效果不錯。

有了這個函數,如有類型同為STRUCT_TYPE的兩個結構struct1和struct2,要使struct1各字段的值與struct2各字段的值相等,也就是要把struct2各字段的值賦給struct1,就可以這樣調用以上函數:

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

以上函數簡單、通用、有效,對任意結構類型有效,也適合於其它復雜數據類型,如聯合(union)等。有趣的是,它也適合與整形、浮點型等簡單數據類型的變量之間復制。

此函數的設計思想可以運用在很多方面,如進程之間、計算機之間通信時,可以在通信的一方將某些數據類型拆分成字節,到達通信的另一方再將收到的字節拼成相應的數據類型,這比按位傳遞要簡單、高效得多。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved