struct和typedef struct在c++中的用法


#include<iostream>
using namespace std;
struct test{
int a;

}test;
//定義了結構體類型test,聲明變量時候直接test d;

//如果用typedef的話,就會有區別

struct test1{
int a;
}test11;    //test11是一個變量

typedef struct test2{
int a;
}test22;    //test22 是一個結構體類型。==struct test2

//使用的時候,可以直接訪問test11.a;
//test22必須先聲明一個變量。test22  s22; 然后s22.a=1;這樣來訪問

int  main(){
//test q;  //會報錯error: must use 'struct' tag to refer to type 'test' in this scope
struct test q;
q.a=10;

cout<<"q:"<<q.a<<endl;

test1 d;
d.a=11;

cout<<"d:"<<d.a<<endl;

//test11 f;   會報錯error: use of undeclared identifier 'f' test11 f;

//f.a=14;
//cout<<"f:"<<f.a<<endl;

test11.a=11111;   //test11是變量,可以直接賦值
cout<<"test11.a"<<test11.a<<endl;

test2 w;
w.a=12;

cout<<"w:"<<w.a<<endl;

test22 r;
r.a=13;

cout<<"r:"<<r.a<<endl;
//可以用test2 w聲明變量,也可以 test22 r;聲明變量。和c語言中不同。c語言中test2 w 聲明會把錯的

return 0;
}

來自網絡的一個解釋參考:

 typedef struct tagMyStruct
    { 
     int iNum;
     long lLength;
    } MyStruct;

    上面的tagMyStruct是標識符,MyStruct是變量類型(相當於(int,char等))。

    這語句實際上完成兩個操作:

      1) 定義一個新的結構類型

    struct tagMyStruct
    {   
     int iNum; 
     long lLength; 
    };

  分析:tagMyStruct稱為“tag”,即“標簽”,實際上是一個臨時名字,不論是否有typedef ,struct 關鍵字和tagMyStruct一起,構成了這個結構類型,這個結構都存在。

  我們可以用struct tagMyStruct varName來定義變量,但要注意,使用tagMyStruct varName來定義變量是不對的,因為struct 和tagMyStruct合在一起才能表示一個結構類型。

  2) typedef為這個新的結構起了一個名字,叫MyStruct。

    typedef struct tagMyStruct MyStruct;

  因此,MyStruct實際上相當於struct tagMyStruct,我們可以使用MyStruct varName來定義變量。

  2.

    typedef struct tagMyStruct
    { 
     int iNum;
     long lLength;
    } MyStruct;

    在C中,這個申明后申請結構變量的方法有兩種:

    (1)struct tagMyStruct 變量名

    (2)MyStruct 變量名

    在c++中可以有

    (1)struct tagMyStruct 變量名

    (2)MyStruct 變量名

    (3)tagMyStruct 變量名

 


免責聲明!

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



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