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/460314.shtml

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

相关文章

单元测试代码:SpringTest+JUnit

2019独角兽企业重金招聘Python工程师标准>>> /*** JUnit单元测试父类&#xff0c;配置了Spring的基础环境。 <br/>* 可以作为Controller、Service、Dao单元测试的父类。* * author leiwenfansunion.cn*/ public class JUnitTestBase {public static XmlWebApp…

mysql类 php100_php mysql 类

1 <?php2 /**3 * MySQL 数据库操作工具类, 方便数据库操作.4 * 示例见底部注释.5 * author: fuck me every day6 */7 class Mysql{8 var $conn;9 var $query_list array();10 public $query_count 0;1112 public function __construct($c){13 if(!isset($c[port])){14 $c…

SQL Server 索引和表体系结构(三)

SQL Server 索引和表体系结构&#xff08;三&#xff09; 原文:SQL Server 索引和表体系结构&#xff08;三&#xff09;包含列索引 概述 包含列索引也是非聚集索引&#xff0c;索引结构跟聚集索引结构是一样&#xff0c;有一点不同的地方就是包含列索引的非键列只存储在叶子节…

简单了解线程和进程、多进程和多线程、并发和并行的区别

一&#xff1a;线程与进程 1.概念 线程&#xff1a;是程序执行流的最小单元&#xff0c;是系统独立调度和分配CPU&#xff08;独立运行&#xff09;的基本单位。 进程&#xff1a;是资源分配的基本单位。一个进程包括多个线程。 2.区别&#xff1a; 1.线程与资源分配无关&…

jdbc mysql demo_JDBC_demo:java连接mysql过程

1.任何数据库驱动程序都提供对java.sql.Driver接口的驱动类&#xff0c;mysql-connector-java-5.1.39-bin.jar中Driver&#xff1a;packagecom.mysql.jdbc;importjava.sql.DriverManager;importjava.sql.SQLException;public class Driver extendsNonRegisteringDriverimplemen…

Java中发邮件的6种方法

2019独角兽企业重金招聘Python工程师标准>>> 1.官方标准JavaMail Sun&#xff08;Oracle&#xff09;官方标准&#xff0c;功能强大&#xff0c;用起来比较繁琐。 官方资料&#xff1a;http://www.oracle.com/technetwork/java/javamail/index.html 2.第三方实现…

查询字符串某个字符的个数

select len(05011045)-len(replace(05011045,0,))转载于:https://www.cnblogs.com/zwc-blog/p/3787888.html

假定Csomething是一个类,执行下面这些语句后,内存里创建了几个Csomething对象

假定Csomething是一个类&#xff0c;执行下面这些语句后&#xff0c;内存里创建了几个Csomething对象 Csomething a(); Csomething b(2); Csomething c[3]; Csomething &ra b; Csomething d b; Csomething *pA c; Csomething *p new Csomething(4); Csomething a();/…

用mongo实现mysql视图_浅谈 MongoDB 的视图

2018 年 9 月 18 日&#xff0c;由 Robert Gravelle 撰写在关系数据库中&#xff0c;视图是由查询定义的可搜索数据子集。视图有时被称为“虚拟表”&#xff0c;因为它们不存储数据&#xff0c;但可以像表一样被查询。MongoDB 最近在版本 3.4 中引入了视图。在今天的文章中&…

将DataTable 数据插入 SQL SERVER 数据库

原文:将DataTable 数据插入 SQL SERVER 数据库 以下提供3中方式将DataTable中的数据插入到SQL SERVER 数据库&#xff1a;一&#xff1a;使用sqlcommand.executenonquery()方法插入 foreach (DataRow datarow in datatable.Rows) { string sql "INSERT INTO [Table_1] ([…

如何在WinForm中发送HTTP请求

Winform窗体中发送HTTP请求手工发送HTTP请求主要是调用 System.Net的HttpWebResponse方法手工发送HTTP的GET请 求: 1 string strURL "http://localhost/Play/CH1/Service1.asmx/doSearch?keyword";2 strURL this.textBox1.Text;3 System.Net.HttpWebRequest reques…

mysql两列取小_mysql – 我想获取两列特定列之间的列值

如果我理解正确,我认为你不能用一个查询来做到这一点.您可以尝试使用以下内容.添加了对代码的评论.SET schema database_name_here; -- Database nameSET table table1; -- Table nameSET startColumn column_start;SET endColumn column_end;-- First get the position of…

struts2.1.6教程二、struts.xml配置及例程

1.配置文件的优先级 在struts2中一些配置&#xff08;比如常量&#xff09;可以同时在struts-default.xml&#xff08;只读性&#xff09;&#xff0c;strtus-plguin.xml&#xff08;只读性&#xff09;&#xff0c;struts.xml&#xff0c;struts.properties和web.xml文件中配置…

Linux 压缩和解压命令

tar.gz&#xff1a; 压缩&#xff1a; tar -zcvf 压缩后的包名.tar.gz 压缩的目录 zcvf &#xff1a; z 压缩成gz的后缀 c 创建压缩包 t 查看压缩包内容 v 显示压缩过程(输出压缩的文件) f 固定参数 后边接压缩包 解压&#xff1a; tar -zxvf 压缩包名称.tar.gz [-C 目…

spring注解配置quartz

常规配置quartz可以参考我的另外一篇博文:http://www.cnblogs.com/yangzhilong/p/3349116.html spring配置文件里增加&#xff1a; 命令空间&#xff1a; http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.0.xsd 配…

java char 空_2020重新出发,JAVA入门,数据类型

数据类型通过上一节&#xff0c;明白了变量就是申请内存来存储值&#xff0c;即当创建变量的时候&#xff0c;需要在内存中申请空间。内存管理系统根据变量的类型为变量分配存储空间&#xff0c;确定了变量的类型&#xff0c;即确定了数据需分配内存空间的大小&#xff0c;数据…

域控制器

1. Server01上创建域控制器&#xff1a;域名uec.com DNS和本机在同一台机器上。2. Server02 创建现有域的额外控制器&#xff0c;同时在本机生成DNS区域&#xff0c;检查DC间复制状态。卸载域控制器&#xff1a;域的备份还原:实例: 域的备份 对当前UEC.COM的域控制器Ser…

u-boot启动参数命令格式

指令功能nand info显示可使用的 Nand Flashnand device [dev]显示或设定当前使用的 Nand Flashnand read addr off sizeNand Flash 读取命令&#xff0c;从 Nand 的 off 偏移地址处读取 size 字节的数据到 SDRAM 的 addr地址。nand write addr off sizeNand Flash 烧写命令&…

iOS7下隐藏status bar的详细研究

info.plist文件中&#xff0c;View controller-based status bar appearance项设为YES&#xff0c;则View controller对status bar的设置优先级高于application的设置。为NO则以application的设置为准&#xff0c;view controller的prefersStatusBarHidden方法无效&#xff0c;…

产品经理应该mysql_数据库对产品经理的重要性

产品经理在设计产品的过程中基本上都在和数据打交道&#xff0c;对产品数据存储结构设计的了解可以帮助产品经理建立产品的数据模型&#xff0c;数据模型就是数据在服务器中存储结构的设计&#xff0c;功能层上看到的是一个个根据用户场景设计的功能&#xff0c;但是实际上在数…