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

分类: 知识是积累滴~
好文要顶 关注我 收藏该文
bingo~
关注 - 5
粉丝 - 101
+加关注
78 1
posted @ 2011-05-06 16:31 bingo~ 阅读(550071) 评论(32) 编辑 收藏

发表评论
#1楼 2012-11-07 22:24 | -3-Lillian
好棒好棒~.
支持(1) 反对(0)
#2楼 2013-04-25 09:21 | xiren
还是没懂

引用
在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
;)
这就把我绕晕了
支持(5) 反对(2)
#3楼 2013-07-12 10:19 | 阳光很温暖
@ xiren
按我理解,意思就是:在C中,不用typedef,声明时必须struct Student stu1;用typedef,声明时就可以Student stu1。
支持(10) 反对(3)
#4楼 2013-11-29 09:47 | 东方晚来
很棒加上typedef struct Student
    {
     int a;
    }Stu, *pStu;指针说明就更好了
支持(5) 反对(0)
#5楼 2014-03-17 21:02 | 君子慎独不欺暗室
@ 东方晚来
typedef struct Student
    {
     int a;
    }Stu, pStu;
能否讲解下此处定义是什么意思?
支持(4) 反对(0)
#6楼 2014-04-07 11:47 | goodgirl_lin
@ 一直在
pStu是Stu类型的指针。
就像int
一样。
可以在后面定义:
Stu student;
pStu p;
p=&student;
支持(0) 反对(0)
#7楼 2014-06-26 16:58 | chaoking
很好,学习了!
支持(1) 反对(0)
#8楼 2014-10-24 21:36 | keloli
“typedef为这个新的结构起了一个名字,叫MyStruct。

typedef struct tagMyStruct MyStruct;

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

我也是这样理解的!
支持(2) 反对(0)
#9楼 2014-11-02 22:20 | —阿辉
不错
支持(0) 反对(0)
#10楼 2014-11-16 14:06 | Lee在路上
typedef struct tagMyStruct
    {
     int iNum;
     long lLength;
    } MyStruct;
在文章最后,像你说的,使用tagMyStruct+变量名,来定义一个结构体变量,编译通不过。。
支持(0) 反对(0)
#11楼 2014-11-16 14:15 | Lee在路上
对的,有C和C++的区别,换成C++就可以的了
支持(0) 反对(0)
#12楼 2014-12-03 17:02 | 银冰冷月
写的很好,正如名字,彻底明白了!
支持(1) 反对(0)
#13楼 2014-12-17 19:02 | Wamei
不错。懂了
支持(1) 反对(0)
#14楼 2015-02-26 10:11 | amleven
写的非常的不错,正对这一块迷迷糊糊呢!受教了
支持(1) 反对(0)
#15楼 2015-11-02 19:45 | 土豆排骨饭
赞,不愧是彻底明白
支持(1) 反对(0)
#16楼 2015-12-08 16:54 | gig886
个人感觉直接说说在这个地方C和C++的差异?以及为什么会有这些差异会更好?
支持(2) 反对(0)
#17楼 2016-03-31 20:44 | 阿胜4K
终于学到了。困扰了我,好久。
支持(0) 反对(0)
#18楼 2016-04-22 21:20 | cDoubleJ
真棒,解决了我的困惑
支持(0) 反对(0)
#19楼 2016-06-12 15:07 | 皮特99
点赞!
  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;
struct 在c++ 相当于一个只有 public 成员的一个类
支持(2) 反对(0)
#20楼 2016-09-02 10:28 | 巴迪大大wo
typedef struct
{
int year,month,day;
}Date;
struct Date{
int year,month,day;
};
struct Student
{
char id[10],name[10];
int age;
Date date;
};
为什么要先typedef Date 然后再struct Date,是什么意思?而且缺少还不可以
支持(1) 反对(0)
#21楼 2016-10-17 17:50 | 小陈同学啦
没懂,我还是没搞懂c和c++下的区别
支持(1) 反对(0)
#22楼 2016-10-18 14:29 | 小陈同学啦
今天又通读一遍。博主真厉害,受益匪浅啊
支持(0) 反对(0)
#23楼 2017-04-30 09:57 | 阿楞丶
分析:tagMyStruct称为“tag”,即“标签”,实际上是一个临时名字,不论是否有typedefstruct 关键字和tagMyStruct一起,构成了这个结构类型,这个结构都存在。
  我们可以用struct tagMyStruct varName来定义变量,但要注意,使用tagMyStruct varName来定义变量是不对的,因为struct 和tagMyStruct合在一起才能表示一个结构类型。
代码1
#include<stdlib.h>
#include
using namespace std;

struct tagMyStruct
{
int iNum=1;
long lLength=2;
};

int main(void)
{
struct tagMyStruct s1;

cout <<s1.iNum << endl;
system(“pause”);
return 0;
}
代码2
#include<stdlib.h>
#include
using namespace std;

struct tagMyStruct
{
int iNum=1;
long lLength=2;
};

int main(void)
{
tagMyStruct s1;

cout <<s1.iNum << endl;
system(“pause”);
return 0;
}
这两个代码在vs中的运行结果一样博主在其次的讲解中与在分析中的讲解有点矛盾。
支持(0) 反对(0)
#24楼 2017-07-06 14:41 | mujia
@ Romama
我也一直不懂这种表达方式
支持(0) 反对(0)
#25楼 2017-09-21 18:29 | ArvinShaffer
谢谢博主,简单的说明了情况
支持(0) 反对(0)
#26楼 2017-10-27 00:29 | 粉青哥哥
@ 阳光很温暖 用了typedef,意思就是把原来的结构体变量名struct Student换了一个名字Stu,所以就只能用Stu s1;了,而不能直接Student s1;
支持(0) 反对(0)
#27楼 2017-10-27 01:09 | 粉青哥哥
看了楼主的讲解,我总结了一下:
C和C++在结构体上的区别:
C中,定义一个结构体变量必须要用typedef(只有这一种方式):
typedef struct Student
{
int a;
float b;
}Stu;
Stu s1;
s1.a=1;
s1.b=2.2;

而在C++中,有两种方式,
方式一:不需要typedef即可定义
struct Student
{
int a;
float b;
}Stu;
Stu.a=1;
Stu.b=2.2;
可以直接用Stu.a;而不需要Stu s1;然后再s1.a;

方式二:用typedef定义
typedef struct Student
{
int a;
float b;
}Stu1;
Stu1 stu1;
stu1.a=1;
stu1.b=2.2;

其实,只要用了typedef,C、C++用法都一样,只是C++多了一种方式而已。
支持(0) 反对(0)
#28楼 2019-03-06 08:34 | 就是讲什么话都可以
mark
支持(0) 反对(0)
#29楼 2019-03-08 09:50 | zongzi10010
纠正一下吧,C语言也是可以直接定义变量的

struct Student
{
int a;
float b;
}Stu;

这就是定义了一个变量stu,类型为struct Student
我没看出来C 和C++ 中的区别
支持(1) 反对(0)
#30楼 2019-04-16 12:01 | 模式识别中心主任
赞赞赞
支持(0) 反对(0)
#31楼 2019-06-06 21:32 | 18121792013
真的很赞 ,已懂
支持(0) 反对(0)
#32楼 2019-07-31 15:41 | dazhouwentao
赞同,已懂
支持(0) 反对(0)
刷新评论刷新页面返回顶部
注册用户登录后才能发表评论,请 登录 或 注册, 访问 网站首页。
【推荐】超50万C++/C#源码: 大型实时仿真组态图形源码
【活动】京东云限时优惠1.5折购云主机,最高返价值1000元礼品!
【推荐】零基础轻松玩转华为云产品,获壕礼加返百元大礼
【推荐】919 天翼云钜惠,全网低价,云主机9元轻松购
【推荐】华为云文字识别资源包重磅上市,1元万次限时抢购
【推荐】腾讯云海外云服务器1核2G19.8元/月
【福利】git pull && cherry-pick 博客园&华为云百万代金券

最新 IT 新闻:
· 首次亮相中国:希捷全线新SSD登场
· 比尔·盖茨捐赠超350亿美元:但财富丝毫不受影响
· 我国突破高速磁浮列车“动力心脏”关键技术
· 规模2500万港元 小米集团时隔两个月再开启股票回购
· 无需使用抗排斥药物 新方法让植入大脑的干细胞长期存活
» 更多新闻…

struct和typedef struct彻底明白了,引用自https://www.cnblogs.com/qyaizs/articles/2039101.html相关推荐

  1. struct和typedef struct

    原文:https://www.cnblogs.com/qyaizs/articles/2039101.html struct和typedef struct 分三块来讲述: 1 首先://注意在C和C+ ...

  2. struct和typedef struct的区别(转)

    转载来源:https://www.cnblogs.com/qyaizs/articles/2039101.html 分三块来讲述: 1 首先://注意在C和C++里不同 在C中定义一个结构体类型要用t ...

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

    struct和typedef struct 分三块来讲述: 1 首先://注意在C和C++里不同 在C中定义一个结构体类型要用typedef: typedef struct Student { int ...

  4. struct和typedef struct用法

    参考:http://www.cnblogs.com/qyaizs/articles/2039101.html C语言: typedef struct Student{int score;}Stu; / ...

  5. struct和typedef struct彻底明白了

    struct和typedef struct 分三块来讲述: 1 首先://注意在C和C++里不同 在C中定义一个结构体类型要用typedef: typedef struct Student { int ...

  6. 位域,extern “C“,struct 和 typedef struct,struct 和 class,union 联合,friend友元类,using,::范围解析运算符

    文章目录 位域 extern "C" struct 和 typedef struct C++中struct 和 class union联合 explicit(显式)关键字 frie ...

  7. c语言中的typedef struct相当于java的一个类?,C ++中'struct'和'typedef struct'之间的区别?...

    在C ++中,之间有什么区别: struct Foo { ... }; 和 typedef struct { ... } Foo; #1楼 您不能对typedef结构使用forward声明. stru ...

  8. struct和typedef struct的区别

    在了解struct和typedef struct之前,我们先学习下typedef的定义和用法. typedef为C语言的关键字,作用是为一种数据类型定义一个新名字.这里的数据类型包括内部数据类型(in ...

  9. struct与typedef struct的区别

    typedef是类型定义的意思.typedef struct 是为了使用这个结构体方便. 具体区别在于: 若struct node {}这样来定义结构体的话.在申请node 的变量时,需要这样写,st ...

最新文章

  1. c++语言static作用,详解c++中的 static 关键字及作用
  2. php中 继承中的概念,JavaScript_JavaScript中的继承方式详解,js继承的概念 js里常用的如下 - phpStudy...
  3. 架构师实践日 11.9 南京站报名 | 技术大牛带你剖析大数据平台内部演进中的挑战与实践...
  4. python 加载与解析xml
  5. 计算机技能大赛图形试题,图形图像处理技能大赛竞赛试题试卷.doc
  6. java 编译器重排序_Java编译器重新排序
  7. 阿里云云中沙箱自助实验-从Gitlab数据库被删看数据备份的重要性!
  8. python怎么把变量付给数组_使用Python将数组的元素导出到变量中(unpacking)
  9. android 编译api,Android逆向利器,直接将apk转换为可二次开发Android工程,提供So hook Api,......
  10. oracle11 ssd 补丁,新装Oracle 11gR2 11.2.0.2重要说明——Patchset p10098816(附补丁下载地址).docx...
  11. java文件头部 追加_java文件追加写入头部
  12. 简单却巧妙,工程师创意太牛了!
  13. 电脑录屏怎么把声音录进去?这些方法可以帮到你!
  14. matlab神经网络43个案例PDF,matlab神经网络预测模型
  15. PR中直接打开AE去做特效方法?
  16. Mac上UltraEdit v18.00.0.22 分享
  17. 祝愿天下所有的有情人都终成眷属
  18. 计算机科学与探索期刊审稿周期,计算机科学与探索期刊 从投稿到录用过程
  19. MTK Camera驱动移植
  20. linux灯控软件下载,Maize DMX下载

热门文章

  1. 4. js移动端点触(tap)事件
  2. Ubuntu桌面不见了,桌面找回
  3. strcmp, strncmp和memcmp的区别
  4. google浏览器 使用css: transform造成字体模糊问题
  5. html5 阿狸照片展示,阿狸手抄报美观简洁图片5张
  6. 31 家企业入选阿里云首期云原生加速器,共建云原生行业新生态
  7. CSS画等腰三角形与直角三角形
  8. 谁会使用IEC61499
  9. 推荐一波 Linux 网络工具
  10. 灰狼优化算法(GWO)附代码