通用結構複製函式

2021-04-28 14:18:58 字數 889 閱讀 7785

在c/c++語言中,將乙個組合資料型別如結構各個欄位的值複製到另乙個相同型別的結構中,可以將其對應字段賦值。這種方法對於各種複雜的結構如多字段結構、巢狀結構,就要寫很多行賦值語句,而且如果原來的結構定義更改,程式**就要隨著更改,使用很不方便。本文給出了乙個通用的結構複製函式。

假定結構的型別為struct_type。為了提高效率,用指標引入兩個結構到函式中;為了通用,這兩個指標用任意指標。函式設計的出發點是,每個結構在記憶體中各欄位連續存放,而且,每個字段可以分解中乙個乙個的位元組。這樣,複製結構時,可以讓兩個結構的對應的每個位元組表示的值相等。於是,函式設計如下:

void struct_copy(

void *p_struct1, /*結構指標1*/

void *p_struct2, /*結構指標2*/

unsigned int struct_size /*結構型別長度,可以用sizeof(struct_type)代入*/

)}

這個函式在pc機和康柏alpha小型機上使用效果不錯。

有了這個函式,如有型別同為struct_type的兩個結構struct1和struct2,要使struct1各字段的值與struct2各字段的值相等,也就是要把struct2各字段的值賦給struct1,就可以這樣呼叫以上函式:

struct_copy(&struct1, &struct2, sizeof(struct_type));
以上函式簡單、通用、有效,對任意結構型別有效,也適合於其它複雜資料型別,如聯合(union)等。有趣的是,它也適合與整形、浮點型等簡單資料型別的變數之間複製。

此函式的設計思想可以運用在很多方面,如程序之間、計算機之間通訊時,可以在通訊的一方將某些資料型別拆分成位元組,到達通訊的另一方再將收到的位元組拼成相應的資料型別,這比按位傳遞要簡單、高效得多。

string通用函式

這篇博文乙個月前就想寫了,但是拖到現在才有時間。起因是要做乙個公司的專案,這個專案是用mfc寫的,其實底層實現大多數都是用的標準庫,但是讓我比較尷尬的是我不會mfc,於是就想把介面和底層剝離,用qt來設計介面。別的還好說,最蛋疼的就是這個專案裡用大量的cstring變數以及相關函式,沒辦法我就替換這...

Oracle 通用函式

to date 功能 字元型資料到日期型資料轉換 格式 to date 引數一,fmt 引數一 字串型資料 引數二 格式元素 yyyy,year,dd,month等 例如 根據員工的入職日期 2月 22 1981 檢視員工的資訊 分析 日期格式應用 22 2月 1981 select ename,h...

Oracle 通用函式

這些函式適用於任何資料型別,同時也適用於空值 nvl 函式 nvl expr1,expr2 expr1為null,返回expr2,否則返回expr1。nvl2 函式 nvl2 expr1,expr2,expr3 expr1不為null,返回expr2 expr1為null,返回expr3。nulli...