C語言中結構體的拷貝

2021-07-24 16:55:17 字數 1063 閱讀 2264

結構體是一種資料結構,類似 c++的類。

結構體中 可能包含 很多種變數: (整型,浮點型,結構體,指標);

結構體在定義的時候請盡量保持:低位元組變數在前,低位元組變數在後,這樣 可以提高**質量和記憶體的利用率.(關於結構體的大小暫不討論)

設結構體 data如下:

[cpp]view plain

copy

typedef

struct

datadata;  

data a,b;  

a.a=4;  

a.b ='a'

;  b=a;  

結構體的淺拷貝可以直接採用a=b;就像普通的複製運算一樣,沒有任何問題.

為什麼這麼說呢?

首先:data中沒有指標,只有乙個int ;乙個 char; 在data a,b語句執行後;系統已為a,b均分配好空間.

在b=a;語句執行後 編譯器會自動的將a的值賦給b 就像 執行了  b.a=a.a;   b.b=a.b;一樣;

之後 a和b就沒有任何關係了. 結構體"拷貝"成功; 

但以上結構體拷貝只能叫淺拷貝,或者說,在結構體裡面沒有指標時 淺拷貝 和 深拷貝 是沒有任何不同的;

淺拷貝 就是 說 講乙個結構體裡面的值完全賦給另乙個結構體.

但當結構體中含有指標時:淺拷貝只會拷貝指標所指向的空間位址值;

而不會深層的自動額外分配空間,並拷貝空間內的值.

這樣子的話,當b=a賦值語句執行後,a和b中各會有兩個指標指向同乙個空間;

當a中指標指向的空間被銷毀後,b中指標成野指標.呼叫指標值 和 釋放指標時會出現異常,且不易排錯.

[html]view plain

copy

<

precode_snippet_id

="1990921"

snippet_file_name

="blog_20161117_1_2180126"

>

pre>

<

pre>

pre>

頂 0

C語言中結構體

struct oursvoid main struct ours o2 01 結構體整體直接賦值的時候,即使字串也可以直接賦值 o1.str o2.str 錯誤,字串不能直接賦值 字串拷貝的方式 sprintf o1.str,02.str strcpy o1.str,o2.str 3.1 第一種情況...

C語言中的結構體

在 c語言中,結構體 struct 指的是一種資料結構,是c語言中聚合資料型別 aggregate data type 的一類。結構體可以被宣告為 變數 指標或 陣列等,用以實現較複雜的 資料結構。結構體同時也是一些元素的集合,這些元素稱為結構體的成員 member 且這些成員可以為不同的型別,成員...

c語言中的結構體

定義結構體變數 結構體 自定義的一種型別稱為構造型別,在c語言中稱為結構體 定義結構體 struct 結構體名 定義結構體變數 1.struct 結構體名 變數名 引用結構體成員 運算子.結構體變數.成員 定義結構體變數並初始化 struct 結構體名 變數名 結構體與陣列類似,定義之後不能直接整體...