一.函式引數:
1.傳值:
傳值時結構體引數會被拷貝乙份,在函式體內修改結構體成員不能改變呼叫引數。在這種情況下,由於涉及到結構體引數的拷貝,程式空間及時間效率都會受到影響,這種方法基本不用。
2.傳指標:
傳指標是直接將結構體的首位址傳遞給函式體,在函式體中通過指標引用結構體成員,可以對結構體引數成員的值造成實際影響,這種用法效率高,經常採用。 如:
struct tagstustudent;
void fun(student *pstu)student;
student fun();
int _tmain(int argc, _tchar* argv)
student fun()
以指標方式返回結構體如下:
student* fun()
三.結構體和類的比較
結構是一種用關鍵字struct宣告的自定義資料型別。與類相似,也可以包含建構函式,常數,字段,方法,屬性,索引器,運算子和巢狀型別等,不過,結構是值型別。
1.結構的建構函式和類的建構函式不同。
a.結構不能包含顯式的無引數建構函式。結構成員將自動初始化為它們的預設值。
b.結構不能包含以下形式的初始值設定類:base(argument-list);
2.對於結構中的例項字段成員,不能在宣告時賦值初始化。
3.宣告了結構型別後,可以使用new運算子建立構造物件,也可以不使用new關鍵字。如果不使用new,那麼在初始化所有字段之前,欄位將保持未賦值狀態且物件不可用。
4.結構不支援繼承,即乙個結構不能從另乙個結構或類繼承,而且不能作為乙個類的基類。但是,結構從基類object繼承。結構也可以實現介面。
5.結構在堆疊中建立,是值型別;類在堆中建立,是引用型別。
6.struct預設為public,class預設為private。
四.總結
結構體:
「沒有預設的建構函式,但可以新增建構函式」 「沒有析構函式」 「沒有abstract和sealed(因為不能繼承)」 「不能有protected修飾符」 「可以不適用new初始化」 「在結構中初始化例項欄位是錯誤的」 類:
「有預設的建構函式」 「有析構函式」 「可以使用abstract和sealed」 「有protected修飾符」 「必須使用new初始化」
摘自:
Swift中 Class和Struct的區別
1.記憶體管理方式不一樣,類引用型別,分配在堆上。結構體值型別,分配在棧上。2.類,有析構。結構體不能有析構,playground中測試直接卡死。3.結構體建構函式,會自動生成帶引數的構造器。類不會對有初始化賦值的屬性,生成帶引數的構造器。2.類有繼承特性,結構體沒有繼承特性,自然也不存在對成員屬性...
struct與class的區別
如何選擇結構還是類 一 類與結構的示例比較 結構示例 public struct person 類示例 public class testtime 呼叫過程 public class test 從上面的例子中我們可以看到,類的宣告和結構的宣告非常類似,只是限定符後面是 struct 還是 class...
class與struct的區別
類與結構的例項比較 類與結構的差別 如何選擇結構還是類 一 類與結構的示例比較 結構示例 public struct person 類示例 public class testtime 呼叫過程 public class test 從上面的例子中我們可以看到,類的宣告和結構的宣告非常類似,只是限定符後...