淺談c語言和c++中struct的區別


  今天做二叉樹的時候,發現利用結構體有點亂,不知道怎么回事,我之前知道c語言中聲明一個結構體變量時需要通過 struct 結構體名 變量名,而在c++中,可以不要struct,由於可以利用typedef嘛,但是在c++中,不能在結構體后面聲明結構體數組,見如下代碼;

typedef struct Node{
    Node *lchild;
    Node *rchild;
    int key;
}Node,*Tree,T[110];

 在這個代碼中,不能利用后面的T[10];如果去掉typedef后便可以使用了,很奇怪,所以百度了一下,發現了c和c++語言中的一些區別,

以下是來自:http://www.cnblogs.com/stonehat/

1. C++語言將struct當成類來處理的,所以C++的struct可以包含C++類的所有東西,例如構造函數,析構函數,友元等,C++的struct和C++類唯一不同就是

    struct成員默認的是public, C++默認private。而C語言struct不是類,不可以有函數,也不能使用類的特征例如public等關鍵字 ,也不可以有static關鍵字。

2. C++ struct里面成員初始化的形式和類是相同的,不可以直接初始化,就是不可以定義成員的時候同時初始化。C語言 struct中間的某個類型(例如int)也不可以直接初始化。

   就是說下面int a = 0;在C++和C語言里面都是不能通過的。

   

struct HE
{
int a = 0;
}
//C++和C編譯是不能通過的。

3.  初始化方式,C++ struct的初始化,C++不僅擁有C語言的初始化方式。如下:

 

按 Ctrl+C 復制代碼
按 Ctrl+C 復制代碼

 

也可以使用類的初始化方式

復制代碼
struct HE
{
int a;

};
int main(){
HE d;
d.a = 3;
return 0;
}
復制代碼



4. 類型不同,下面代碼:

 

struct HE
{
int a;

};

在C里面實際上數據類型為 (struct HE),所以定義一個結構HE變量都要 帶上struct. 

struct  HE a;   //C語言 變量方式

而在C++里面實際上數據類型為HE(主要是因為結構體被當成類對待了),所以定義變量不需要 struct.

HE a; //C++語言 變量

5. typedef struct 在C++和C語言中都是一樣的功能,定義別名。 但是要注意下面的代碼的區別

//代碼一

復制代碼
#include <stdio.h>
#include <stdlib.h>
typedef struct HE
{
int a;

} *PHE,DHE,EHE; //這是定義了一個struct HE*類型別名和兩個普通別名,main函數只考慮指針型別名。
int main(){
PHE a = (PHE)malloc(sizeof(struct HE)); //這是C語言的寫法
//PHE a = new HE(); 這是C++語言的寫法
return 0;
}
復制代碼
復制代碼
//代碼二
#include <stdio.h>
#include <stdlib.h>
struct HE
{
int a;

} *PHE,DHE,EHE; //這里定義了一個指針型變量和兩個普通變量
復制代碼

上面兩個代碼省略 struct的名字 HE都是可以的。

 

總結:C++語言因為是和C語言兼容的,所以C語言的語法在C++編譯器里不會出錯,但是程序員最好知道什么是C語言,什么是C++語言。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM