C與C++中struct使用的區別
今天參看了louden用c編寫的編譯器,發現其中一些地方使用struct很奇妙。所以又研究了一下struct的區別,並發現c和c++在某些地方是有區別的。
struct作為類的一種特例,是用來自定義資料結構的,在程式設計的過程中是很有用的。C和C++的主要區別是:一個結構標記宣告後,C語言必須在結構標記前加上struct才能作為結構型別名,而C++語言中,結構標記可以直接作為結構型別名使用。此外,結構在C++中被作為類的一種特例,並且在結構中,資料成員和成員函式預設的訪問許可權是共有的,兒類的則是私有的。
首先我們先在C中使用struct:
按照上面的敘述,我很自然的如下書寫:
struct Student{
int a;
int b;
};
int main(){
struct Student st;
st.a = 90;
st.b = 80;
printf("%d",st.a);
}
如果我把struct去掉的話那麼編譯器就會報錯(編譯器使用的是vc 6.0),說Student是未宣告的識別符號。但是在c++中就不用擔心這一點。如下:
#include<iostream>
using namespace std;
struct Student{
int a;
int b;
};
int main(){
Student st;
st.a = 90;
st.b = 80;
cout<<st.a<<endl;
Student tems = st;
cout<<tems.a<<endl;
return 0;
}
編譯器不會報錯。從上述的程式中我們還可以看到,struct在C和C++中可以實現各個變數之間的賦值,也就是說不用過載賦值操作符。
那麼在C中我可不可以把struct給去掉呢?當然可以,你可以這麼做:
typedef struct student{
int a;
int b;
} Student;
int main(){
Student st;
st.a = 90;
st.b = 80;
printf("%d",st.a);
}
使用typedef即可實現上述要求。
++++++++++++++++++++++++++++++++++++++++++++++++++++++
在C和C++中struct和union是非常相似的,只不過union共享儲存區而已,共享的是資料變數所佔空間最大的儲存區。其他和struct一樣,都如上所述:
union Student{
int a;
int b;
};
int main(){
union Student st;
st.a = 90;
st.b = 80;
printf("%d",st.a);
}
輸出結果是80
C++:
#include<iostream>
using namespace std;
union Student{
int a;
int b;
};
int main(){
Student st;
st.a = 90;
st.b = 80;
cout<<st.a<<endl;
Student tems = st;
cout<<tems.a<<endl;
return 0;
}
輸出結果是80 80,從中可以看出它也過載了=操作符。
相關文章
- C++中 struct 和 class 的區別C++Struct
- C++中struct 和 class的區別C++Struct
- C++基礎(八)struct和class的區別C++Struct
- C/C++——C++中new與malloc的10點區別C++
- c與c++的區別C++
- C++ 結構體struct和共同體union的區別C++結構體Struct
- C# 中 Struct 和 Class 的區別總結C#Struct
- JAVA 與 C++ 的區別JavaC++
- C++中結構體與類的區別C++結構體
- C++中new與malloc的10點區別C++
- 關於C與C++的區別C++
- 引用的例子 C C++ 中區別C++
- C++中struct的空間計算C++Struct
- swift中Class和Struct的區別SwiftStruct
- C++指標與引用的區別C++指標
- C++中的return和exit區別C++
- C/C++中的日期和時間 TIME_T與STRUCT TM轉換C++Struct
- C++中運算子 &和&&、|和|| 的區別C++
- C和C++區別C++
- C++中L和_T()之區別C++
- c++中&和&&有什麼區別C++
- [C++] template+struct 組合使用小技巧C++Struct
- const關鍵字在C與C++中修飾變數的區別C++變數
- ACID中C與CAP定理中C的區別
- c++中的隱藏及過載、重寫與隱藏的區別C++
- C/C++——sizeof和strlen的區別C++
- fill函式與memset函式的區別(c++)函式C++
- C++ 中四種強制型別轉換的區別C++型別
- C#中List與IList的區別C#
- Opensturt和Struct區別Struct
- C++中break和continue的用法和區別C++
- C++中建立物件的兩種方法及其區別C++物件
- union, struct, enum 的 大小區別Struct
- C++基礎:: struct vs classC++Struct
- Swift語言中class、struct、enum的聯絡與區別SwiftStruct
- C++中vector*和vector有什麼區別C++
- C++中過載、重寫、重定義的區別C++
- 【C/C++】c++多程式與hiredis的淺使用C++Redis