zoukankan      html  css  js  c++  java
  • struct和typedef struct的用法

    我首先想到的去MSDN上看看sturct到底是什么东西,虽然平时都在用,但是每次用的时候都搞不清楚到底这两个东西有什么区别,既然微软有MSDN,我们为什么不好好利用呢,下面是摘自MSDN中的一段话:

    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 structkeyword 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与结构结合使用:

    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来定义变量

    备注 :本文章转自于:http://blog.csdn.net/xw13106209/article/details/4967689 ,在此感谢他的精彩分享!

  • 相关阅读:
    springmvc
    POJ 3683 Priest John's Busiest Day
    POJ 3678 Katu Puzzle
    HDU 1815 Building roads
    CDOJ UESTC 1220 The Battle of Guandu
    HDU 3715 Go Deeper
    HDU 3622 Bomb Game
    POJ 3207 Ikki's Story IV
    POJ 3648 Wedding
    HDU 1814 Peaceful Commission
  • 原文地址:https://www.cnblogs.com/xd-elegant/p/4147945.html
Copyright © 2011-2022 走看看