以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 C/C++编程思想 』  (http://bbs.xml.org.cn/list.asp?boardid=61)
----  在C和C++中struct和typedef struct的区别  (http://bbs.xml.org.cn/dispbbs.asp?boardid=61&rootid=&id=41942)


--  作者:一分之千
--  发布时间:1/4/2007 8:33:00 PM

--  在C和C++中struct和typedef struct的区别

在C和C++有三种定义结构的方法。

typedef struct {

                           int data;

                     int text;

       } S1;

//  这种方法可以在c或者c++中定义一个S1结构


struct S2 {

                int data;

                int text;

};


// 这种定义方式只能在C++中使用,而如果用在C中,那么编译器会报错


struct {

         int data;

         int text;

} S3;


这种方法并没有定义一个结构,而是定义了一个s3的结构变量,编译器会为s3内存。


void main()

{

       S1 mine1;        // OK ,  S1 是一个类型

       S2 mine2;        // OK,   S2 是一个类型

       S3 mine3;        // OK,   S3 不是一个类型


       S1.data = 5;  // ERROR  S1 是一个类型

       S2.data = 5;  // ERROR  S2 是一个类型

       S3.data = 5;  // OK       S3是一个变量

}

另外,对与在结构中定义结构本身的变量也有几种写法


struct S6 {

                     S6* ptr;

};

// 这种写法只能在C++中使用


typedef struct {

                            S7* ptr;

} S7;

// 这是一种在C和C++中都是错误的定义


如果在C中,我们可以使用这样一个“曲线救国的方法“

typedef struct tagS8{

                                   tagS8 * ptr;

} S8;


--  作者:JuliusTing
--  发布时间:6/23/2007 11:09:00 PM

--  
/*************************************************************/
楼主曰:
struct S2
   {
   int data;
   int text;  
   };
// 这种定义方式只能在C++中使用,而如果用在C中,那么编译器会报错
/*************************************************************/

楼主这句话有问题
我在TC2下面使用根本没问题。楼主肯定是在声明S2结构类型的变量的时候忘记了在S2面前加上struct.


--  作者:JuliusTing
--  发布时间:6/23/2007 11:18:00 PM

--  
/******************************************/
楼主又曰:
struct S6 {


                     S6* ptr;


};


// 这种写法只能在C++中使用

typedef struct
  {
  S7* ptr;
  } S7;
// 这是一种在C和C++中都是错误的定义
/******************************************/
typedef struct  s6
{
struct s6* ptr;
} S7;
这样不就行了?


W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
46.875ms