struct和typedef struct在C与C++中用法

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 变量名

转自:https://www.cnblogs.com/qyaizs/articles/2039101.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/255333.shtml

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

相关文章

【数据库学习】——Python实现mysql数据库SQL文件生成和导入

目录 1、将mysql数据导出到SQL文件中(数据库存在的情况) 2、将现有的sql文件数据导入到数据库中(前提数据库存在) 3、利用Navicat导出SQL文件和导入SQL文件 1)从数据库导出SQL文件 2)导入SQL文件到数据…

lfcp——PB使用

场景:记录以备忘。 1 直接说明 pb连接说明:目前项目共有性能、功能、业务、联调四个环境。所以pb可以连接四个不同的数据库。1.copy一份pb程序,修改main.ini文件中的DBCONNECT/DBCONNECT2位new,DBNAME/DBNAME2为oracle数据源中的源…

【重磅】Google官方推出了免费的、中文的、机器学习初级课程。

2019独角兽企业重金招聘Python工程师标准>>> 机器学习(Machine Learning, ML)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。它是人工智能的核心,是使计算机具有智能的根本途径,其应用遍及…

市面上常见arduino版本比较

http://arduino.cc/en/Main/Products 详细链接 如果是入门,那么首选UNO R3,方便又省心 如果不是特殊要求,不建议购买2560,因为贵啊 nano是块很好的控制器,买不买随你咯 非特殊场合使用不建…

leetcode-114. Flatten Binary Tree to Linked List

Given a binary tree, flatten it to a linked list in-place. For example,Given 1/ \2 5/ \ \3 4 6The flattened tree should look like: 1\2\3\4\5\6思路:递归处理,引用二叉链表的思想,使用pre记录上一个分支的指针。Accepted Co…

HALCON示例程序autobahn高速公路车道识别程序剖析

HALCON示例程序autobahn高速公路车道识别程序剖析 小哥哥小姐姐觉得有用点个赞呗! 示例程序源码(加注释) *关闭halcon窗口的实时更新 dev_update_window (‘off’) *关闭halcon图形窗口 dev_close_window () *打开图形窗口 *dev_open_win…

CSS中的未定义行为,浏览器的差异(一)

今天看了张鑫旭大佬的新书的有感吧,记录一下。 Web标准未对一些场景做出明确规范,所以各大浏览器厂家只能根据自己的理解和喜好去实现,表现差异不是浏览器的bug,用计算机领域的术语描述为"未定义行为"。 比如一个例子&a…

KVC 和 KVO

作者 冲破茧缚 2015.08.28 16:12* 写了3967字,被8人关注,获得了14个喜欢KVC 和 KVO 字数363 阅读32 评论0 喜欢0KVC (Key Value Coding),键值编码,通过键值(字符串)来访问属性的机制,来间接修改…

Atmel megaAVR控制器 串行引导Bootloader

开始研究下Bootloader的代码结构 2015.1.9 粗略看了下,Bootloader主要做了下板卡的初始化 -----> 然后进入for( ; ; )死循环 -----> 循环刷新串口数据 -----> 根据数据做出不同应答 -----> 如果有写数据,则将数据存入buffer …

MapReduce入门2-流量监控

3、流量监控汇总(使用LongWritable实现) hdfs文件路径:/tmp/flow.txt 查看文件内容: 13770759991 50 100 25 400 13770759991 800 600 500 100 13770759992 400 300 250 1400 13770759992 800 1200 600 900字符串含义:…

【fiddler学习问题记录】——手机端证书下载页打不开、无法将此证书安装(已解决)

目录 1、手机端下载页打不开 解决方法1)电脑端——将网络设置成公用(亲测有效) 解决方法2)手机端将fiddler设置为信任应用,不被拦截 (未试) 2、无法将此证书安装 方法一:修改证书…

HALCON示例程序ball电路板焊点识别、检测、测量程序剖析

HALCON示例程序ball电路板焊点识别、检测、测量程序剖析 示例程序源码(加注释) 介绍: ball.hdev: Inspection of Ball Bonding *halcon窗口实时更新关闭 dev_update_window (‘off’) *halcon关闭所有窗口 dev_close_window () *halcon打开…

舵机的原理和控制

控制信号由接收机的通道进入信号调制芯片,获得直流偏置电压。它内部有一个基准电路,产生周期为20ms,宽度为1.5ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。最后,电压差的正负输出…

HDFS清理坏块

报错 Failed with exception java.io.IOException:org.apache.hadoop.hdfs.BlockMissingException: Could not obtain block: BP-1921057509-192.168.57.129-1517160177567:blk_1073741930_1106 file/user/hive/warehouse/db_hive.db/student/student.txt Time taken: 0.104 se…

如何在PowerDesigner将PDM导出生成WORD文档或者html文件

a) 使用PowerDesigner打开pdm文件 b) 点击Report Temlates 制作模板 点击PowerDesigner菜单栏“Report” -> “Report Templates” c) 选择模板数据项 完成步骤a),得到如下界面,左右2个区,Aavailable区…

【软件测试】——基础篇(软件测试技术体系、过程管理)

目录 软件测试技术体系 软件测试过程管理​编辑 接口测试用例设计 手机端测试流程​编辑 软件测试技术体系 软件测试过程管理 接口测试用例设计 手机端测试流程

vue 的常用模块安指令(持续记录)

# 全局安装 vue-cli $ cnpm install --global vue-cli# 创建一个基于 webpack 模板的新项目 $ vue init webpack my-project # 路由管理模块 $ npm install vue-router --save # 状态管理模块 $ npm install vuex --save # 网络请求模块 $ npm install vue-resource --save # 停…

HALCON基于形状匹配详解

HALCON基于形状的模板匹配详细说明 很早就想总结一下前段时间学习HALCON的心得,但由于其他的事情总是抽不出时间。去年有过一段时间的集中学习,做了许多的练习和实验,并对基于HDevelop的形状匹配算法的参数优化进行了研究,写了一…

俄罗斯:自由软件在这里生根

2008年6月15日,我在“俄罗斯:自由软件在这里起飞“一文中介绍了自由软件在俄罗斯的发展情况。现在,许多年过去了,实际情况如何呢? 回顾以往,俄罗斯境内自由软件的精英们,在2001年组建了ALTLinux…

小米出招黑科技,5S或成全球首款”Under glass“指纹识别手机

这一次,小米PK苹果,小米胜。 不得不说,最近的手机圈真是热闹,继三星Note 7爆炸、苹果iPhone 7发布一度成为新闻热点之后,小米又来暗戳戳地抢风头了。 最近小米即将发布的两款新旗舰消息扎堆,其中基本已经确…