#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 變量名
