structとtypedef structは徹底的に分かった

2425 ワード


C/C++语法知识:typedef struct 用法详解
typedef struct OLNode
{
  int i,j;
  int data;
  OLNode *right,*down;
}OLNode,*OLink;//     OLNode,        *OLink,
     
struct OLNode{};
OLNode OLNode, *OLink;
 

 
 
3つのブロックに分けて説明します:1まず://注意CとC++の中で異なってCの中で1つの構造体のタイプを定義するのはtypedef:typedef struct Studio{int a;}Stuを使います;変数を宣言するときに、Stu stu 1;(typedefがなければstruct Studio stu 1で宣言する必要があります)ここのStuは実際にはstruct Studioの別名です.Stu=struct StudentまたここではStudentを書かなくても良い(そこでstruct Student stu 1もできない;もう、Stu stu 1でなければならない;)typedef struct{int a;}Stu;しかしc++では簡単で、直接struct Student{int a;};そこで構造体タイプStudentを定義し、変数を宣言するときに直接Student stu 2;  2.次に、c++でtypedefを使うと、struct Studio{int a;}stu 1;//stu 1は変数です
      typedef   struct   Student2       {       int   a;       }stu2;//stu 2は構造体タイプ=struct Studioです
使用時にstu 1に直接アクセスできます.aしかしstu 2はまずstu 2 s 2でなければならない.そしてs 2.a=10; ====================================================================================== 3上の2つをマスターすればいいのですが、最後にあまり関係のない問題を検討します.cプログラムでtypedef struct{int num;int age;}aaa,bbb,cccと書きます.これは何ですか.個人的にコンパイラ(VC 6)の理解を観察します.これはtypedef struct{int num;int age;}に相当します.aaa;     typedef aaa bbb;     typedef aaa ccc; すなわちaaa,bbb,cccの3つはいずれも構造体タイプである.変数を宣言するときはいずれでも構いません.c++でも同様です.しかし、c++にtypedefキーワードが書かれている場合、aaa、bbb、cccはまったく異なる3つのオブジェクトになることに注意してください.
//ここはよくわかりません.
   
 
 
typedef structとstructの違い:
 
 
    typedef struct tagMyStruct    {      int iNum;     long lLength;    } MyStruct;
上のtagMyStructは識別子であり、MyStructは変数タイプ(int,charなどに相当)である.
 
 
この文は実際に2つの操作を完了します.
1)新しい構造タイプを定義する
    struct tagMyStruct    {        int iNum;      long lLength;     };
分析:tagMyStructは「tag」、すなわち「ラベル」と呼ばれ、実際には一時的な名前であり、typedefstructキーワードがあるかどうかにかかわらずtagMyStructとともに、この構造タイプを構成し、この構造は存在する.
struct tagMyStruct varNameで変数を定義できますが、structとtagMyStructを合わせて構造タイプを表すことができるため、tagMyStruct varNameを使用して変数を定義するのは間違っています.
2)typedefはこの新しい構造にMyStructという名前をつけた.
    typedef struct tagMyStruct MyStruct;
したがって、MyStructは実際にstruct tagMyStructに相当し、MyStruct varNameを使用して変数を定義することができます.
  2.
    typedef struct tagMyStruct    {      int iNum;     long lLength;    } MyStruct;
Cでは,この申明後に構造変数を申請する方法は2つある.
(1)struct tagMyStruct変数名
(2)MyStruct変数名
c++には
(1)struct tagMyStruct変数名
(2)MyStruct変数名
(3)tagMyStruct変数名