﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-小虫虫的书架-随笔分类-C++</title><link>http://www.cppblog.com/percyph/category/9691.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 06 Mar 2009 18:23:18 GMT</lastBuildDate><pubDate>Fri, 06 Mar 2009 18:23:18 GMT</pubDate><ttl>60</ttl><item><title>struct和typedef struct </title><link>http://www.cppblog.com/percyph/archive/2009/03/06/75742.html</link><dc:creator>小虫虫</dc:creator><author>小虫虫</author><pubDate>Fri, 06 Mar 2009 06:20:00 GMT</pubDate><guid>http://www.cppblog.com/percyph/archive/2009/03/06/75742.html</guid><wfw:comment>http://www.cppblog.com/percyph/comments/75742.html</wfw:comment><comments>http://www.cppblog.com/percyph/archive/2009/03/06/75742.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/percyph/comments/commentRss/75742.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/percyph/services/trackbacks/75742.html</trackback:ping><description><![CDATA[分三块来讲述：<br><span style="color: #940000;">1 首先：</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在C中定义一个结构体类型要用typedef:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;typedef struct Student<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int a;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}Stu;<br>于是在声明变量的时候就可：Stu stu1;<br>如果没有typedef就必须用struct Student stu1;来声明<br>这里的Stu实际上就是struct Student的别名。<br>另外这里也可以不写Student（于是也不能struct Student stu1;了）<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;typedef struct<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int a;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}Stu;<br>但在c++里很简单，直接<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;struct Student<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int a;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};<br>于是就定义了结构体类型Student，声明变量时直接Student stu2；<br>===========================================<br> <span style="color: #940000;">2其次：</span><br>在c++中如果用typedef的话，又会造成区别：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct&nbsp;&nbsp; Student&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp; a;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }stu1;//stu1是一个变量&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; typedef&nbsp;&nbsp; struct&nbsp;&nbsp; Student2&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp; a;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}stu2;//stu2是一个结构体类型&nbsp;&nbsp; <br>使用时可以直接访问stu1.a<br>但是stu2则必须先&nbsp;&nbsp; stu2 s2;<br>然后&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s2.a=10;<br>===========================================<br><span style="color: #940000;">3 </span>掌握上面两条就可以了，不过最后我们探讨个没多大关系的问题<br>如果在c程序中我们写：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; typedef struct&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int num;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int age;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }aaa,bbb,ccc;<br>这算什么呢？<br>我个人观察编译器（VC6）的理解，这相当于<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; typedef struct&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int num;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int age;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }aaa；<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; typedef aaa bbb;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; typedef aaa ccc;<br>也就是说aaa,bbb,ccc三者都是结构体类型。声明变量时用任何一个都可以,在c++中也是如此。但是你要注意的是这个在c++中如果写掉了typedef关键字，那么aaa，bbb，ccc将是截然不同的三个对象。<img src ="http://www.cppblog.com/percyph/aggbug/75742.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/percyph/" target="_blank">小虫虫</a> 2009-03-06 14:20 <a href="http://www.cppblog.com/percyph/archive/2009/03/06/75742.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>