C 與C 的差異

2021-07-04 20:33:34 字數 1679 閱讀 4388

1、c#結構是堆疊物件,不能在堆上建立它;

2、c#結構可以繼承介面,但是不能繼承自其它結構;

3、不能重寫結構的預設建構函式,需要自定義建構函式時必須建立附帶引數的建構函式,以保證和預設建構函式的引數列表有所區別;

4、當使用new來建立結構物件時其建構函式自動被呼叫,若僅是像宣告乙個int型別的變數那樣宣告乙個結構型別的變數而不new的話,那麼結構中成員變數必須被初始化後才能使用該結構物件。

struct

student : igrade  

public

intmaths;  

public

intenglish;  

public

intcsharp;  

public

intgettot()  

public

student(

inty)  

}  public

string

getgrade()  

}  inte***ce

igrade  

接下來看看怎麼使用建立的c#結構,**如下:

student s1 = 

newstudent();  

console.writeline(s1.gettot());  

console.writeline(s1.getgrade()); 

c#結構示例之輸出:

0  

failed 

上述**顯示預設的建構函式被呼叫,建構函式將所有結構中的int成員變數都自動初始化為0,這就是為何合計為0的原因。

下面來看一段有意思的**:

student s2;  

s2.maths = s2.english = s2.csharp = 50;  

console.writeline(s2.gettot());  

console.writeline(s2.getgrade()); 

c#結構示例之輸出:

150  

passed 

上述**我們沒有使用new來建立結構,所以建構函式不會被呼叫,僅是宣告乙個結構型別的變數s2,但是緊接著我們為結構的所有成員變數進行初始化賦值,那麼結構照樣可以使用。儘管很多人都在爭論,認為這種賦值伎倆太不專業且顯得有點傻,然而誰也無法找到合情合理的解釋,但是這樣做的確可行。當我們注釋掉賦值語句後,編譯器則會報錯:使用了未賦值的本地變數s2。

我們還可以使用自定義建構函式並傳遞乙個整型變數來建立結構物件,**如下:

student s3 = 

newstudent(90);  

console.writeline(s3.gettot());  

console.writeline(s3.getgrade()); 

c#結構示例之輸出:

270  

brilliant 

不像類是引用型別,結構是值型別的,所以結構比類操作起來更簡單。當使用類僅儲存一些資料時,你會發現使用結構會好得多!結構化陣列是在堆上建立的,而以乙個乙個類的形式來建立物件,則必須提前在堆上分配記憶體,而且每個類的引用位址也需要額外儲存起來,所以使用結構化陣列則更加的有效率。實際上在.net框架裡大部分類也都是結構,譬如:system.drawing.point。

C 與C的差異分析

雖說c 是向後相容c的,但c 與c還是存在許多差異。本文列舉了幾個例子加以說明,同時這些也是我們非常容易忽略的地方。本文僅簡單的列舉幾例,更多的不同之處讀者還需要在學習與實踐中不斷的進行發掘和總結。c編譯通過但c 編譯不通過 1 c 中編譯器不允許在乙個函式宣告之前呼叫它,但c中編譯器是允許的。in...

C 與C語言容易忽視的幾個差異

7次 c和c 之間的關係非常的密切,我們也都知道c 是從c擴充而來的,但是這並不表示c 對c完全相容。c 並不是c的超集,c的有些特性在c 中並不適用。看完 c專家程式設計 之後,從中了解到了幾個。簡單總結一下。1 在c 中,使用者 不能呼叫main函式,但在c語言中卻是允許的。所以可以遞迴呼叫ma...

Qt與C檔案操作的差異

在使用qt的qdatastream類進行檔案的二進位制處理時發現與c語言的標準io有差異,下面用 說明。include include include include int main int argc,char argv 程式執行時輸出 num 1 305419896 num 2 30541989...