typedef struct和struct定义结构体的区别

转载 2016年08月31日 09:43:36
http://www.cnblogs.com/sparon/archive/2010/12/06/1897835.html

结构也是一种数据类型, 可以使用结构变量, 因此, 像其它类型的变量一样, 在使用结构变量时要先对其定义。
定义结构变量的一般格式为: 
struct 结构名
{
      类型 变量名;
      类型 变量名;
      ...
} 结构变量;
结构名是结构的标识符不是变量名。
另一种常用格式为:
typedef struct 结构名
{
      类型 变量名;
      类型 变量名;
      ...
} 结构别名;
   
另外注意: 在C中,struct不能包含函数。在C++中,对struct进行了扩展,可以包含函数。

 

下面分三块来讲述:

1 首先:
在C中定义一个结构体类型要用typedef:
typedef struct Student
{
    
int a;
}Stu;

 

于是在声明变量的时候就可:Stu stu1;
如果没有typedef就必须用struct Student stu1;来声明
这里的Stu实际上就是struct Student的别名。
另外这里也可以不写Student(于是也不能struct Student 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是一个结构体类型   

 

使用时可以直接访问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与struct定义结构体有一些不同之处: 结构也是一种数据类型, 可以使用结构变量, 因此,  象其它 类型的变量一样, 在使用结构变量时要先对其...
  • zaizai09
  • zaizai09
  • 2014年06月27日 22:12
  • 1557

typedef struct,自定义数据类型struct和类的区别

typedef struct,自定义数据类型struct和类的区别 引用大牛的 typedef struct和struct区别: 自定义数据结构类型: struct  类名{类体}; C语言...
  • chenjianqi0502
  • chenjianqi0502
  • 2016年01月08日 10:00
  • 2606

struct和typedef struct、enum与typedef enum、链表与结构体的区别

iOS不支持c++,只支持c和object c:   1 在C中定义一个结构体类型要用typedef:     typedef struct Student     {      int a;   ...
  • LVXIANGAN
  • LVXIANGAN
  • 2013年11月28日 10:46
  • 4681

struct和typedef struct彻底明白了 && C语言结构体

转自:struct和typedef struct 分三块来讲述:   1 首先://注意在C和C++里不同     在C中定义一个结构体类型要用typedef:     typedef struct ...
  • zyh821351004
  • zyh821351004
  • 2015年08月24日 23:46
  • 11819

struct结构体的初始化及typedef的理解总结

struct结构体是C语言中非常重要的复合类型,初始化的方法很多,下面对这些方法进行总结,便于以后查阅。 一、gcc扩展方式(不知道该如何命名)        [cpp] vie...
  • longtian635241
  • longtian635241
  • 2012年07月06日 09:51
  • 2787

结构标签(struct tag)与类型定义(typedef)的区别

问题1:两种声明有什么不同? struct x1 {...}; typedef struct {...} x2; 答:第一种形式声明了一个结构标签,第二种声明了一个“类型定义”。...
  • shengabc
  • shengabc
  • 2014年03月24日 21:29
  • 1537

struct 结构体的定义及初始化问题

/*****************************/ //以上说明,结构体也没啥特殊的 ,跟普通的数据类型定义变量是一样的。。。 //程序在定义变量的时候,已经分配好了内存空间,只是里面存储...
  • laoding1993
  • laoding1993
  • 2015年03月05日 09:20
  • 2575

c结构体中的 柔性数组

开发C代码时,经常见到如下类型的结构体定义: 1 2 3 4 5 typedef struct list_t{ ...
  • Stand1210
  • Stand1210
  • 2016年09月07日 14:34
  • 832

typedef 和结构体变量的定义方法

首先请看程序: #include  #include  #pragma pack(4)  /* struct  {  int num ;  char name[8];  char...
  • baidu_28053127
  • baidu_28053127
  • 2015年06月12日 10:35
  • 1597

OC 中 objc_selector 结构体详解

找了很多资料都没有很明确很清晰的说清楚objc_selector 在OC中具体是什么情况 在iOS和MAC中 SEL就只是 一个 char *类型的字符串而已 而在 GUN OC 中 iO...
  • jeffasd
  • jeffasd
  • 2016年08月01日 13:53
  • 1203
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:typedef struct和struct定义结构体的区别
举报原因:
原因补充:

(最多只允许输入30个字)