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连接在一起考虑,这就是容易引起疑惑的地方。

  • 相关阅读:
    路由交换03-----传输层协议
    Linux结构目录
    Linux RedHat 7 配置本地 YUM源
    HUAWEI,H3C 三层交换机 常用命令
    windows操作系统更改 <远程桌面> 端口号
    SpringBoot 2.x (2):请求和传参
    SpringBoot 2.x (1):手动创建项目与自动创建项目
    Eclipse中使用Maven搭建SSM框架
    基于Spring和Mybatis拦截器实现数据库操作读写分离
    WinServer配置MySQL主从同步
  • 原文地址:https://www.cnblogs.com/stellar/p/4728352.html
Copyright © 2011-2022 走看看