struct和typedef struct

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 掌握上面两条就可以了,不过最后我们探讨个没多大关系的问题
    如果在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++中如果写掉了typedef关键字,那么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 关键字和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://www.mzph.cn/news/353699.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

notepad++插件实现json、xml格式化

notepad比较出色的免费的数据编辑、格式化工具。。。 现在json、xml文件很流行、格式化也是必须的,方便查看关键信息! 01、下载notepad及相关插件 npp_7.5.5-x86: https://files.cnblogs.com/files/xiaochina/npp_7.5.5-x86.zip npp-json:…

ActiveMQ 5.x中的消息持久性

我被问了很多关于ActiveMQ如何存储消息(或在某些情况下不存储)的基本知识。 这是它的高级解释。 注意,上下文在JMS中。 如果您使用ActiveMQ的非JMS客户端(即STOMP,AMQP,MQTT等),则在…

5.报错:ImportError: No module named win32api

pip install pypiwin32即可 转载于:https://www.cnblogs.com/caimuqing/p/9016190.html

bind1st bind2nd的使用

bind1st bind2nd的使用 Posted on 2010-07-16 09:14 wanpengcoder 阅读(1882) 评论(0) 编辑 收藏 bind1st和bind2nd函数用于将一个二元算子(binary functor,bf)转换成一元算子(unary functor,uf)。为了达到…

一个select元素自定义设计的新思路:appearance: none之后利用符号制造小箭头

最近工作时解决了一个前端小问题(如下图所示):在Safari中,select的控件之上有不和谐的灰色部分。 刚开始时我以为是backgrand或是border设置不当之类产生的问题,在搜索了很久之后终于找到了问题所在:这个灰…

调整HashMap的大小:未来的危险

最近,我偶然发现了一个错误,该错误是由于多个线程对java.util.HashMap的使用不当引起的。 该错误是抽象泄漏的一个很好的例子。 只有了解数据结构的实现级别详细信息,才能帮助我解决当前的问题。 因此,我希望分享我所面临的问题将…

别的程序员是怎么读你的简历的

别的程序员是怎么读你的简历的 2009年11月9日 陈皓 下面这个图片来源国外,是一个关于程序员面试时的简历,被人事部门和程序员本身评审的角度不同的图片。当然,这是一个从国外面试的视角制作的图片,不过,可以看出&#…

漫谈C++重载运算符

漫谈C重载运算符 1.前置运算符和后置运算符,左值和右值 其实很久以来一直都没有怎么搞清楚左值和右值的区别,只知道左值可以放在等号的左边,也可以放在等号的右边,但是右值却只能放在等号的右边,然后形成一个大概直观…

Zabbix linux agent 安装

系统:Linux Centos 7.3 x64 服务:Zabbix_agent 3.0.16 一.安装Zabbix_agent 服务 1.安装zabbix 3.0 yum源 rpm -ivh http://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm 2.安装Zabbix_agent yum install zabbix-agen…

io和nio的缓冲_IO与NIO –中断,超时和缓冲区

io和nio的缓冲假设有一个系统有时需要将文件复制到几个位置,但是这种方式在响应能力至关重要的情况下。 换句话说,如果由于某种原因文件系统过载,而我们无法在不到一秒钟的时间内写入文件,它应该放弃。 ExecutorService是一项非常…

直接在apk中添加资源的研究

原文 http://blog.votzone.com/2018/05/12/apk-merge.html 之前接手过一个sdk的开发工作,在开发过程中有一个很重要的点就是尽量使用代码来创建控件,资源文件最好放到assets目录下,如果必须使用res资源,需要通过 getResources().g…

强制类型转换简介

强制类型转换简介 强制类型转换当操作数的类型不同,而且不属于基本数据类型时,经常需要强制类型转换,将操作数转化为所需要的类型。强制类型转换具有两种形式,称为显式强制转换和隐式强制类型转换。强制类型转换不改变原来数据的类…

JavaFX实际应用程序:SkedPal

“真实世界的应用程序”系列中的一个新条目。 这次是SkedPal ,这是一个用于智能管理忙人生活的应用程序。 我一直在咨询SkedPal团队有关JavaFX的事宜,并且在他们决定开始使用我的CalendarFX框架来满足他们的日历要求时,我也在咨询他们。 在下…

url 特殊字符 传递参数解决方法

url 特殊字符 传递参数解决方法 有些符号在URL中是不能直接传递的,如果要在URL中传递这些特殊符号,那么就要使用他们的编码了。下表中列出了一些URL特殊符号及编码。十六进制值 1. URL 中号表示空格 %2B 2. 空格 URL中的空格可以用号或者编码 %20 3.…

chromium之histogram.h

histogram不知道是干啥的 // Histogram is an object that aggregates statistics, and can summarize them in // various forms, including ASCII graphical, HTML, and numerically (as a // vector of numbers corresponding to each of the aggregating buckets). google翻…

Java中的功能性FizzBu​​zz Kata

不久前,我使用Java 8流和lambda解决了FizzBu​​zz kata问题。 尽管最终结果是可行的,但中间步骤却没有。 我当然可以做得更好。 与往常一样,让我们​​从失败的测试开始: package remonsinnema.blog.fizzbuzz;import static or…

axis2 wsdl2java 使用方式

axis2 wsdl2java 使用方式(2011-04-15 22:41:43) 说明见:http://hi.baidu.com/aotori/blog/item/ee98efcdc6cc300301e92814.html 用wsdl2java简化客户端的编写 也许有很多读者会说“有没有搞错啊,只调用两个WebService方法用要写这么多代码,…

电脑播放视频的时候有杂音

一开始我还以为是视频本身自带的杂音,但是换了一个其它视频播放测试了一下,发现还是一样的结果。不甘心,又播放了一个音频,结果还是有杂音。 于是想是不是无意中把驱动卸载了,于是下载了驱动精灵补驱动。下载安装之后驱…

Axis2错误

Axis2错误 www.MyException.Cn 发布于:2012-09-18 16:21:42 浏览:70次 Axis2异常异常:java.lang.NoClassDefFoundError: org/apache/neethi/PolicyComponent 缺少:neethi-2.0.4.jar 异常:java.lang.ClassNotFound…

viewobject_只读ViewObject和声明性SQL模式

viewobject介绍 声明式SQL模式被认为是基于实体的视图对象的最有价值的优点之一。 在这种模式下,根据UI中显示的属性在运行时生成VOSQL。 例如,如果某个页面包含一个只有两列EmployeeId和FirstName的表,则查询将生成为“从Employees中选择Emp…