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 ,在此感谢他的精彩分享!

  • 相关阅读:
    R语言中基于混合数据抽样(MIDAS)回归的HAR-RV模型预测GDP增长
    R语言马尔可夫体制转换模型Markov regime switching
    php设计模式--简单介绍
    css字体图标的使用方法
    linux系统管理--top命令
    linux系统管理--查看进程
    linux系统管理--进程管理
    用户体验时代的9条建议
    【转】纯手工玩转 Nginx 日志
    【转】一分钟内检查Linux服务器性能
  • 原文地址:https://www.cnblogs.com/xd-elegant/p/4147945.html
Copyright © 2011-2022 走看看