zoukankan      html  css  js  c++  java
  • struct和typedef struct

    1 首先://注意在C和C++里不同
        在C中定义一个结构体类型要用typedef:
        typedef struct Student
        {
        int a;
        }Stu;
        于是在声明变量的时候就可:Stu stu1;(如果没有typedef就必须用struct Student stu1;来声明)
        这里的Stu实际上就是struct Student的别名。Stu==struct Student
        另外这里也可以不写Student(于是也不能struct Student stu1;了,必须是Stu stu1;)
        typedef struct
        {
        int a;
        }Stu;
        但在c++里很简单,直接
        struct Student
        {
        int a;
        };    
        于是就定义了结构体类型Student,声明变量时直接Student stu2;

    =======================================================

    2.其次:
        在c++中如果用typedef的话,又会造成区别:
        struct   Student   
        {   
        int   a;   
        }stu1;//stu1是一个变量  

     
        typedef   struct   Student2   
        {   
        int   a;   
        }stu2;//stu2是一个结构体类型=struct Student  

     
        使用时可以直接访问stu1.a
        但是stu2则必须先   stu2 s2;
        然后               s2.a=10;

    ================================================

    3.typedef struct和struct的区别:

       typedef struct tagMyStruct

        { 
         int iNum;
         long lLength;
        } MyStruct;

        上面的tagMyStruct是标识符,MyStruct是变量类型(相当于(int,char等))。

     

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

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

        struct tagMyStruct
        {   
         int iNum; 
         long lLength; 
        };

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

    ======================================================

    4.LNode与*LinkList

    typedef struct LNode
    {
    int data;
    struct LNode *next;
    }LNode,*LinkList;

    typedef struct Lnode Lnode; 
    注意这里的struct Lnode是一个整体,表明Lnode是一个结构体类型,把struct Lnode重定义为Lnode,以后就可以不用写struct了,直接使用Lnode定义结构体变量或指针等等。

    typedef struct Lnode* LinkList;
    把struct Lnode* 重定义为LinkList,以后就可以使用LinkList来简化定义Lnode*类型的变量了(当然咯,是个指向struct变量的指针)。 应该把定义中的那个*与前面的结构体连接在一起考虑,而不是与后面的LinkList连接在一起考虑,这就是容易引起疑惑的地方。

  • 相关阅读:
    串口速率问题
    java中byte short int的理解
    matlab 设置坐标轴的有效数字
    Tomcat闪退
    解决linux下sudo更改文件权限报错xxxis not in the sudoers file. This incident will be reported.
    Git的常用命令
    [原创]创建指定RowState属性的DataRow实例
    [转]中文VS2008中安装ASP.NET MVC框架出现问题的解决方法
    [转]JavaScript为事件处理器传递参数
    [转]LINQ to SQL(LINQ2SQL) vs. ADO.NET Entity Framework
  • 原文地址:https://www.cnblogs.com/stellar/p/4728352.html
Copyright © 2011-2022 走看看