The struct keyword defines a structure type and/or a variable of a structure type. A structure type is a user-defined composite type. It is composed of "fields" or "members" that can have different types.In C++, a structure is the same as a class except that its members are public by default.In C, you must explicitly use the struct keyword to declare a structure. In C++, this is unnecessary once the type has been defined.You have the option of declaring variables when the structure type is defined by placing one or more comma-separated variable names between the closing brace and the semicolon.


从上面这段话中我们知道在c++中struct和typedef struct的用法基本没有区别了。下面是代码:
#include<iostream>  
using namespace std;  
  
struct PERSON              /* Declare PERSON struct type */  
{  
   int   age;              /* Declare member types */  
   long  ss;  
   float weight;  
   char  name[25];  
} family_member;           /* Define object of type PERSON,定义一个PERSON类型的对象family_member,定义对象并不占用内存。*/  
  
/* Structure variables can be initialized. The initialization for each variable must be enclosed in braces. */  
/* 这表示在C++中struct其实就是一个类,只不过这个类中的默认访问属性是public类型的,而在c++中默认访问类型是private的 */  
  
struct POINT            /* Declare POINT structure */  
{  
   int x;               /* Define members x and y */  
   int y;  
} spot = { 20, 40 };    /* Variable spot has  values x = 20, y = 40,定义对象后马上初始化,这时候分配内存 */  
  
struct POINT there;     /* Variable there has POINT type */  
  
int main()  
{  
      
    struct PERSON sister;   /* C style structure declaration,C语言风格第一一个PERSON类型的对象sister */  
    PERSON brother;         /* C++ style structure declaration,而在C++中我们已经没有必要加上关键字struct了, 
                               直接用结构体类型PERSON定义对象brother */  
  
    sister.age  = 13;       /* assign values to members */  
    brother.age =  7;  
    family_member.age=23;   /* 在创建结构体的时候就定义了的对象 */  
    there.x=spot.x;  
    POINT p;  
    p.y=spot.y;  
  
    cout<<sister.age<<" "<<brother.age<<endl;  
    cout<<family_member.age<<endl;  
    cout<<spot.x<<" "<<spot.y<<endl;  
    cout<<there.x<<" "<<p.y<<endl;  
  
  
    return 0;  
}  

 

下面介绍在c语言中的用法

 typedef与结构结合使用:

[c-sharp] view plaincopy
typedef struct tagMyStruct  
{   
 int iNum;  
 long lLength;  
} MyStruct;   

这语句实际上完成两个操作:

1) 定义一个新的结构类型

struct tagMyStruct
 int iNum; 
 long lLength; 
};

        分析:tagMyStruct称为“tag”,即“标签”,实际上是一个临时名字,struct 关键字和tagMyStruct一起,构成了这个结构类型,不论是否有typedef,这个结构都存在。

        我们可以用struct tagMyStruct varName来定义变量,但要注意,使用tagMyStruct varName来定义变量是不对的,因为struct 和tagMyStruct合在一起才能表示一个结构类型。

2) typedef为这个新的结构起了一个名字,叫MyStruct。

typedef struct tagMyStruct MyStruct;

  因此,MyStruct实际上相当于struct tagMyStruct,我们可以使用MyStruct varName来定义变量。