struct和typedef struct 有什麼不同呢?

Mobidogs發表於2020-04-04

[提問] 最近在論壇中經常看到有些初學者問起, struct _x1 { ...}x1; 和 typedef struct _x2{ ...} x2; 有什麼不同? 

其實, 前者是定義了類_x1和_x1的物件例項x1,  後者是定義了類_x2和_x2的類別名x2 ,
所以它們在使用過程中是有取別的.請看例項1.

 

[知識點]

結構也是一種資料型別, 可以使用結構變數, 因此,  象其它
型別的變數一樣, 在使用結構變數時要先對其定義。
    定義結構變數的一般格式為:
     struct 結構名
     {
          型別  變數名;
          型別  變數名;
          ...
     } 結構變數;
    結構名是結構的識別符號不是變數名。

另一種常用格式為:  

 typedef struct 結構名
     {
          型別  變數名;
          型別  變數名;
          ...
     } 結構別名; 


另外注意:  在C中,struct不能包含函式。在C++中,對struct進行了擴充套件,可以包含函式。

========================================================================

例項1:  struct.cpp

#include <iostream>
using namespace std;
typedef struct _point{
          int x;
          int y;
          }point; //定義類,給類一個別名 
                
struct _hello{
       int x,y;       
      } hello; //同時定義類和物件
       
         
int main()
{          
    point pt1;       
    pt1.x = 2;
    pt1.y = 5;
    cout<< "pt1.x=" << pt1.x << "pt.y=" <<pt1.y <<endl; 


    //hello pt2; 
    //pt2.x = 8;
    //pt2.y =10;
    //cout<<"pt2.x="<< pt2.x <<"pt2.y="<<pt2.y <<endl;
    //上面的hello pt2;這一行編譯將不能通過. 為什麼?
    //因為hello是被定義了的物件例項了.
    //正確做法如下: 用hello.x和hello.y

      
    hello.x = 8;
    hello.y = 10;  
    cout<< "hello.x=" << hello.x << "hello.y=" <<hello.y <<endl;
      
    return 0;             
}

相關文章