struct在C和C++中用法区别。

时间:2022-02-06 19:50:26
经常在C代码中看到这样的用法:

typedef struct Point2d
{
    double x;
    double y;
}POINT2D


而C++中则可以这样子用:

struct Point2d
{
    double x;
    double y;
}

请问C采用typedef的方式的原因是?

17 个解决方案

#1


C里面也可以这么写
struct Point2d
{
    double x;
    double y;
}


但定义变量的时候必须加上struct
struct Point2d a;

有typedef的话直接POINT2D a;就行了

#2


引用 1 楼 akirya 的回复:
C里面也可以这么写
C/C++ code?12345struct Point2d{    double x;    double y;}

但定义变量的时候必须加上struct
C/C++ code?1struct Point2d a;
有typedef的话直接POINT2D a;就行了

------------------------------------------------------------------------
对于struct Point2d a;
不能直接使用Point2d的原因是?(C语言这样的设计的目的是?)

#3


typedef 只是为了给类型名字struct XX起一个别名 比较方便使用而已
不是必须加上去的

#4


引用 2 楼 lefter1986 的回复:
引用 1 楼 akirya 的回复:C里面也可以这么写
C/C++ code?12345struct Point2d{    double x;    double y;}

但定义变量的时候必须加上struct
C/C++ code?1struct Point2d a;
有typedef的话直接POINT2D a;就行了
------------------……

语法要求而已 也许是为了让人一眼就看出 这个变量是某个结构体类型的变量

#5



typdef struct tagXXX
{
}XXX;

//tagXXX是一个tag, XXX是一类型
//在C中, 使用tag 必须加上 类型关键字struct
//在C++中,tag同时也是类型,这是为了使用方便。算是一个改进。

#6


引用 2 楼 lefter1986 的回复:
引用 1 楼 akirya 的回复:C里面也可以这么写
C/C++ code?12345struct Point2d{    double x;    double y;}

但定义变量的时候必须加上struct
C/C++ code?1struct Point2d a;
有typedef的话直接POINT2D a;就行了
------------------……

为啥这么规定我就不知道了。

#7


typedef struct Point2d
{
    double x;
    double y;
}POINT2D;

上面这代码应该有分号的吧

#8


引用 5 楼 mujiok2003 的回复:
C/C++ code?1234567typdef struct tagXXX{}XXX; //tagXXX是一个tag, XXX是一类型//在C中, 使用tag 必须加上 类型关键字struct//在C++中,tag同时也是类型,这是为了使用方便。算是一个改进。


+1

#9


typedef 仅仅是为了另取一个名,使用方便.

#10


引用 1 楼 akirya 的回复:
C里面也可以这么写
C/C++ code?12345struct Point2d{    double x;    double y;}

但定义变量的时候必须加上struct
C/C++ code?1struct Point2d a;
有typedef的话直接POINT2D a;就行了

++

#11


目测LZ的代码里面,struct最后漏了分号吧……

#12


引用 2 楼 lefter1986 的回复:
引用 1 楼 akirya 的回复:C里面也可以这么写
C/C++ code?12345struct Point2d{    double x;    double y;}

但定义变量的时候必须加上struct
C/C++ code?1struct Point2d a;
有typedef的话直接POINT2D a;就行了
------------------……

原因是K&R觉得加上struct比不加要爽得多,不是开玩笑。

#13


引用 12 楼 supermegaboy 的回复:
引用 2 楼 lefter1986 的回复:引用 1 楼 akirya 的回复:C里面也可以这么写
C/C++ code?12345struct Point2d{    double x;    double y;}

但定义变量的时候必须加上struct
C/C++ code?1struct Point2d a;
有typedef的话直接POINT2D a;就……

struct在C和C++中用法区别。还能这样!

#14


在C++中struct关键词是可以省略的,所以不需要typedef

#15


不用带分号??
C++中的结构体也可以定义方法,并且结构的默认访问权限和继承权限都是public,而类的默认访问权限和继承权限都是private

#16


对这个问题,c和c++的处理都是一样的

#17


struct在C和C++中用法区别。

#1


C里面也可以这么写
struct Point2d
{
    double x;
    double y;
}


但定义变量的时候必须加上struct
struct Point2d a;

有typedef的话直接POINT2D a;就行了

#2


引用 1 楼 akirya 的回复:
C里面也可以这么写
C/C++ code?12345struct Point2d{    double x;    double y;}

但定义变量的时候必须加上struct
C/C++ code?1struct Point2d a;
有typedef的话直接POINT2D a;就行了

------------------------------------------------------------------------
对于struct Point2d a;
不能直接使用Point2d的原因是?(C语言这样的设计的目的是?)

#3


typedef 只是为了给类型名字struct XX起一个别名 比较方便使用而已
不是必须加上去的

#4


引用 2 楼 lefter1986 的回复:
引用 1 楼 akirya 的回复:C里面也可以这么写
C/C++ code?12345struct Point2d{    double x;    double y;}

但定义变量的时候必须加上struct
C/C++ code?1struct Point2d a;
有typedef的话直接POINT2D a;就行了
------------------……

语法要求而已 也许是为了让人一眼就看出 这个变量是某个结构体类型的变量

#5



typdef struct tagXXX
{
}XXX;

//tagXXX是一个tag, XXX是一类型
//在C中, 使用tag 必须加上 类型关键字struct
//在C++中,tag同时也是类型,这是为了使用方便。算是一个改进。

#6


引用 2 楼 lefter1986 的回复:
引用 1 楼 akirya 的回复:C里面也可以这么写
C/C++ code?12345struct Point2d{    double x;    double y;}

但定义变量的时候必须加上struct
C/C++ code?1struct Point2d a;
有typedef的话直接POINT2D a;就行了
------------------……

为啥这么规定我就不知道了。

#7


typedef struct Point2d
{
    double x;
    double y;
}POINT2D;

上面这代码应该有分号的吧

#8


引用 5 楼 mujiok2003 的回复:
C/C++ code?1234567typdef struct tagXXX{}XXX; //tagXXX是一个tag, XXX是一类型//在C中, 使用tag 必须加上 类型关键字struct//在C++中,tag同时也是类型,这是为了使用方便。算是一个改进。


+1

#9


typedef 仅仅是为了另取一个名,使用方便.

#10


引用 1 楼 akirya 的回复:
C里面也可以这么写
C/C++ code?12345struct Point2d{    double x;    double y;}

但定义变量的时候必须加上struct
C/C++ code?1struct Point2d a;
有typedef的话直接POINT2D a;就行了

++

#11


目测LZ的代码里面,struct最后漏了分号吧……

#12


引用 2 楼 lefter1986 的回复:
引用 1 楼 akirya 的回复:C里面也可以这么写
C/C++ code?12345struct Point2d{    double x;    double y;}

但定义变量的时候必须加上struct
C/C++ code?1struct Point2d a;
有typedef的话直接POINT2D a;就行了
------------------……

原因是K&R觉得加上struct比不加要爽得多,不是开玩笑。

#13


引用 12 楼 supermegaboy 的回复:
引用 2 楼 lefter1986 的回复:引用 1 楼 akirya 的回复:C里面也可以这么写
C/C++ code?12345struct Point2d{    double x;    double y;}

但定义变量的时候必须加上struct
C/C++ code?1struct Point2d a;
有typedef的话直接POINT2D a;就……

struct在C和C++中用法区别。还能这样!

#14


在C++中struct关键词是可以省略的,所以不需要typedef

#15


不用带分号??
C++中的结构体也可以定义方法,并且结构的默认访问权限和继承权限都是public,而类的默认访问权限和继承权限都是private

#16


对这个问题,c和c++的处理都是一样的

#17


struct在C和C++中用法区别。