博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
struct和typedef struct
阅读量:7250 次
发布时间:2019-06-29

本文共 2153 字,大约阅读时间需要 7 分钟。

分三块来讲述:

  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++里非常easy。直接
    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 掌握上面两条就能够了,只是最后我们探讨个没多大关系的问题
    假设在c程序中我们写:
    typedef struct  
    {
    int num;
    int age;
    }aaa,bbb,ccc;
    这算什么呢?
    我个人观察编译器(VC6)的理解。这相当于
    typedef struct  
    {
    int num;
    int age;
    }aaa;
    typedef aaa bbb;
    typedef aaa ccc;
    也就是说aaa,bbb,ccc三者都是结构体类型。声明变量时用不论什么一个都能够,在c++中也是如此。

可是你要注意的是这个在c++中假设写掉了typedefkeyword,那么aaa,bbb,ccc将是截然不同的三个对象。

    //此处不是非常理解。

   

 

 

    typedef struct和struct的差别:

 

 

    typedef struct tagMyStruct

    { 
     int iNum;
     long lLength;
    } MyStruct;

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

 

 

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

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

    struct tagMyStruct

    {   
     int iNum; 
     long lLength; 
    };

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

  我们能够用struct tagMyStruct varName来定义变量,但要注意。使用tagMyStruct varName来定义变量是不正确的。由于struct 和tagMyStruct合在一起才干表示一个结构类型。

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

    typedef struct tagMyStruct MyStruct;

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

  2.

    typedef struct tagMyStruct

    { 
     int iNum;
     long lLength;
    } MyStruct;

    在C中。这个申明后申请结构变量的方法有两种:

    (1)struct tagMyStruct 变量名

    (2)MyStruct 变量名

    在c++中能够有

    (1)struct tagMyStruct 变量名

    (2)MyStruct 变量名

    (3)tagMyStruct 变量名

转载地址:http://yeqbm.baihongyu.com/

你可能感兴趣的文章
一个强大的批处理文件
查看>>
基于 Swoole 的微信扫码登录
查看>>
Largest Rectangle in Histogram
查看>>
聊聊pg jdbc的queryTimeout及next方法
查看>>
golang 依赖管理
查看>>
Java常用工具类整理
查看>>
FED之必备技能
查看>>
高性能磁盘 I/O 开发学习笔记 -- 硬件原理篇
查看>>
一个还算优雅的 react 图片组件
查看>>
JSON应知应会
查看>>
一个PHP文件搞定支付宝系列之手机网站支付(兼容微信浏览器)
查看>>
设计模式之代理模式
查看>>
客服系统从Require.js到Webpack
查看>>
React 16 中的异常处理
查看>>
独家解析Javascript原型继承
查看>>
springboot集成mqtt
查看>>
重拾css(3)——学习css的思路
查看>>
SegmentFault 社区访谈 | 有位公子在奇舞
查看>>
jQuery源码分析之jQuery的定义
查看>>
一些经典面试题分析(上)
查看>>