struct 与 typedef struct 的区别

本文详细解析了C和C++语言中struct和typedefstruct的使用方法及区别,包括如何定义结构体类型、声明变量以及typedef在两种语言中的不同作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


struct 和 typedef struct

分三块来讲述:


  一、首先:     //注意在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;
===========================================================================

  二.其次:
    在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;

======================================================================

  三、掌握上面两条就可以了,不过最后我们探讨个没多大关系的问题
    如果在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 tagMyStruct 
      int iNum;
      long lLength;
     } MyStruct;

    C中,这个申明后申请结构体变量的方法有两种:

    (1)struct  tagMyStruct  变量名

    (2)MyStruct  变量名

    在C++中可以有

    (1)struct  tagMyStruct  变量名

    (2)MyStruct  变量名

    (3)tagMyStruct  变量名      【比C多的一种】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值